Problema com hibernate

6 respostas
pauloperes

Prezados,

Tenho uma aplicação onde tenho dois beans, Elemento e outro Cidade. Um elemento se relaciona com uma cidade, quando coleto os meus elementos, o mesmo vem com seguinte nome ex.:

BHE-A25

preciso entao criar um objeto elemento e dentro dele um objeto cidade com as tres primeiras letras do nome acima, essas letras são a chave primária da cidade, a lista de elementos possui varios elementos da mesma cidade, quando vou persistir dou um saveorupdate na cidade e depois no meu elemento, porém estou tendo um problema, vejam o codigo:

for (Shelf s : shelves) {
            s.setModel(model);
            HibernateCore.beginTransaction();

           //Salvo a cidade
            daoCity.getDaoGeneric().saveOrUpdate(s.getCity());            
            // Salvo o elemento            
            daoShelf.getDaoGeneric().saveOrUpdate(s);
            HibernateCore.commitTransaction();
        }

Erro:

Exception in thread "main" org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [br.com.model.City#BHE]
        at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
        at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
        at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
        at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495)
        at br.com.dao.Dao.saveOrUpdate(Dao.java:45)
        at br.com.gvt.seaccess.unem.ShelfDatabaseMilegate.insertShelfDatabase(ShelfDatabaseMilegate.java:36)
        at sendemailelement.Main.main(Main.java:39)
Java Result: 1

Att,

Paulo

6 Respostas

L

Nao sei se entendi mto bem mas vc pode mandar salvar somente o seu objeto denominado “s” e ele salva a lista de cidades,se e isso que eu entendi,basta habiliatr o cascade.All no seu mapeamento.

Cherubini

mas se esse cara aqui já BHE é chave primeira e ja existe no banco, e vc tentar salvar d nv, vai dar erro mesmo!!!

Oq eu n entendi é pq vc tem q salvar a cidade tambem??

se vc ja tem a cidade, é so salvar o elemento, bom foi oq entendi!

pauloperes

Então,

Caso nao exista a cidade deve ser inserida, no caso nao tenho nenhuma cidade ainda inserida e esta dando o erro.

Att,

pauloperes

Coloquei o cascade ALL e salvei somente o objsto s, deu o mesmo erro.

pauloperes

Coloquei o cascade ALL e salvei somente o objsto s, deu o mesmo erro.

mvargens

A reclamação do hibernate é que você tem dois objetos idênticos, só que um dentro da sessão e um fora dela. Da a impressão que você salva um objeto e ele entra na sessão, dai você tenta salvar outro objeto com o mesmo id. Você vai ter que consultar no banco se o Objeto já não foi salvo, ou arrumar a lógica para que não repita os objetos na lista.

Criado 21 de setembro de 2009
Ultima resposta 21 de set. de 2009
Respostas 6
Participantes 4