Eu tenho essencialmente alguns objetos nesta configuração (o modelo de dados real é um pouco mais complexo):
- A tem um relacionamento muitos para muitos com B. (B tem
inverse="true"
) - B tem uma relação muitos-para-um com C. (eu
cascade
configurei para"save-update"
) - C é um tipo de tabela de tipo / categoria.
Além disso, provavelmente devo mencionar que as chaves primárias são geradas pelo banco de dados ao salvar.
Com meus dados, às vezes tenho problemas em que A tem um conjunto de objetos B diferentes e esses objetos B se referem ao mesmo objeto C.
Quando eu chamar session.saveOrUpdate(myAObject)
, eu recebo um erro de hibernação dizendo: "a different object with the same identifier value was already associated with the session: C"
. Eu sei que o Hibernate não pode inserir / atualizar / excluir o mesmo objeto duas vezes na mesma sessão, mas há alguma maneira de contornar isso? Esta não parece ser uma situação tão incomum.
Durante minha pesquisa desse problema, vi pessoas sugerirem o uso de session.merge()
, mas quando faço isso, quaisquer objetos "conflitantes" são inseridos no banco de dados como objetos em branco com todos os valores definidos como nulos. Obviamente, não é isso que queremos.
[Editar] Outra coisa que esqueci de mencionar é que (por razões arquitetônicas além do meu controle), cada leitura ou gravação precisa ser feita em uma sessão separada.