Estou tendo NonUniqueObjectException quando tento dar um saveOrUpdate(object) em um objeto. Sei que isso acontece quando na sessão do hibernate já existe outro objeto com o mesmo id.
Acontece é que sempre abro e fecho a sessão em cada chamada ao banco então não entendo por que isto está acontecendo.
Deixe o controle de conexões ao pool do Hibernate. De qualquer forma, sua dúvida é algo recorrente, já aconteceu comigo… se puder, dê mais detalhes (mapeamento, código, etc.) a respeito do problema para podermos ajudá-lo!
Ja tive estes problemas por varias coisas diferentes, você manda salvar um objeto depois de ter dado flush na sessão do hibernate, ou você armazenou o objeto na sessão (web) e depois esta tentando usar ele direto para alterar sem reanexar ele na sessão do hibernate, e mais numas 4 situações diferentes destas. Realmente tem algo a ver como o fluxo da sua chamada o ideal é dar mais detalhes com o código.
A estrutura desta classe é a seguinte: Um Pedido contém vários ItemPedido e cada item contém um Produto.
Está dando a exception em cima do Produto:
lojavirtual.exception.DAOException: org.hibernate.NonUniqueObjectException: a different object with the
same identifier value was already associated with the session:
[lojavirtual.modelo.Produto#19]
Acho que achei onde está o problema, só não sei como solucionar.
Antes de gravar o pedido, eu carrego (load) um Cliente do banco. Este cliente possui Pedidos, cada ItemPedido possui um Produto.
Fiz um teste lendo o CLiente com JDBC manual (sem Hibernate) e funcionou, parece que o Produto que carrega com os pedidos do cliente conflita com o novo pedido que estou gravando no banco, que tem o mesmo produto.
Estou anexando o códido de leitura do cliente, vejam que sempre fecho a sessão do Hibernate após a leitura. Não era para o objeto ficar atachado à sessão: