Update before delete

4 respostas
tiagowanke

Boa tarde pessoal,

Estou com um problema relacionado ao hibernate que gostaríamos de saber se alguém já passou por isso para poder nos ajudar.
Vou tentar exemplificar através de um código exemplo:

//objA have a list of:

//ObjB id = 1

//ObjB id = 2

//ObjB id = 3

ObjectA objA = entityManger.find(ObjectA.class, 1);

ObjectB objB = entityManger.find(ObjectB.class, 1);

objA.getObjBList().remove(objB);

new ObjectB objNewB = new ObjectB();
objNewB.setId(1);

objA.getObjtBList().add(objNewB);

// this cause the following error:

// javax.ejb.EJBTransactionRolledbackException: org.hibernate.NonUniqueObjectException:

// a different object with the same identifier value was already associated with the session:

entityManager.merge(objA);

Caso precise explicar melhor só avisar.
Obrigado.

4 Respostas

drsmachado

Hibernate trabalha com sessão. Ele guarda os registros (hashesm, na verdade) dos objetos que tratou (select, insert, update).
Quando você tenta deletar ou salvar/alterar um objeto que já foi tratado pelo Hibernate, é preciso recarregá-lo.

tiagowanke

Mas nesse caso em que momento devo recarregar?

drsmachado

Depois de

new ObjectB objNewB = new ObjectB();
objNewB.setId(1);
tiagowanke

Então, o problema é que meu requisito não permite que eu efetue a persistência após remover o email.
Na tela que tenho é um cadastro de usuário e ele tem a opção para editar seus emails. Ele pode adicionar/remover/editar quanto emails ele quiser em sua lista de emails, porém só será persistido quando ele finalizar o formulário todo e clicar no botão salvar, ai persisto a entidade Usuario.

Se o usuário remover o email e sair do formulário sem clicar no salvar a alteração (de remover o email) não deve ter efeito.

Criado 19 de abril de 2012
Ultima resposta 19 de abr. de 2012
Respostas 4
Participantes 2