Problema com Hibernate / JPA

0 respostas
pauloperes

Ola a todos estou desenvolvendo um sistema usando EJB no GlassFish, preciso persistir dados de duas entidades, segue abaixo:

Shelf.java

@Entity
public class Shelf implements Serializable {

    @Id
    private String ip;
    @Column(nullable=false)
    private String name;
    @ManyToOne()
    private City city;
    @Column(nullable=false)
    private String modelName;

    @Temporal(javax.persistence.TemporalType.DATE)
    private Calendar dateInsert;

City.java

@Entity
public class City implements Serializable {

    @Id
    private String symbol;
    
    @Column(nullable=true)
    private String name;
    
    @Column(nullable=false)
    private int areaNumber;

Até aqui td bem, porem na minha classe onde eu gravo os dados, eu trago de um sistema todos os Shelfs, após isto recupero as cidades e primeiro gravo elas, apos isto tento gravar os shelfs, porem da erro, veja:

List<City> citys = new ArrayList<City>();



        for (Shelf s : shelvesManager) {
            if(!citys.contains(s.getCity())){
                citys.add(s.getCity());
            }

        }

        for(City c : citys){
            if (cityFacade.find(c.getSymbol()) != null) {
                System.out.println("cidade  existe: " + c.getSymbol());
                cityFacade.edit(c);
            } else {
                System.out.println("cidade nao existe: " + c.getSymbol());
                cityFacade.create(c);
            }
        }

        // Deleta os shelves que nao estao mais na base de dados
        for (Shelf s : shelvesDatabase) {
            if (!shelvesManager.contains(s)) {
                shelfFacade.remove(s);
            }
        }

        
        // Gravando e atualizando os shelves
        for (Shelf s : shelvesManager) {
            if (shelfFacade.find(s.getIp()) != null) {
                shelfFacade.edit(s);
            } else {
                s.setDateInsert(Calendar.getInstance());
                shelfFacade.create(s);
            }
        }

A mensagem que eu recebo é esta:

Caused by: java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.gvt.seaccess.model.Shelf.city -> br.com.gvt.seaccess.model.City
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1232)
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1168)
        at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:1064)
        at com.sun.enterprise.transaction.JavaEETransactionImpl.commit(JavaEETransactionImpl.java:412)

Alguem sabe como resolver isto?

Att,

Criado 2 de julho de 2010
Respostas 0
Participantes 1