Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Multiple representations of the same entity cannot be merged

Olá, galera!

Tenho o seguinte cenário:

Uma entidade "Empresa" que contém relacionamento OneToMany com lojas.

@OneToMany(mappedBy = "empresa",)private Set lojas = new HashSet<>();

E na entidade "Loja" existe o relacionamento com a entidade "Estado".

@ManyToOne(cascade=CascadeType.ALL) @JoinColumn(name="codIBGE_Estado", referencedColumnName="codIBGE") private Estado estado;

Eu recebo o objeto Empresa, já com as suas lojas e estados, de um Web Service e sincronizo/persisto este objeto no BD da minha aplicação. Ao salvar a entidade "Empresa", com seus relacionamentos, já é persistido as lojas e seus respectivos estados.

Problema: Quando tenho duas lojas da mesma empresa que possuem o mesmo estado, por exemplo São Paulo - SP, acontece o seguinte erro:

javax.ejb.EJBException: java.lang.IllegalStateException: Multiple representations of the same entity [...] are being merged. Detached: [SP]; Detached: [SP]

Pesquisando achei este bug https://hibernate.atlassian.net/browse/HHH-9106.

Pelo que entendi, isso ocorre por conta de uma melhoria de performance no merge do Hibernate. Para funcionar o merge de múltiplas representações da mesma entidade é necessário incluir a seguinte anotação no persistence.xml:

Dessa maneira realmente funciona, mas gostaria de saber se há outra alternativa para não perder a performance no merge do Hibernate ou se existe outra maneira "melhor" para se fazer isso.

Obrigado, desde já!

1 resposta
solução!

Oi Diego,

Pelo que li essa é a solução mesmo.. A única coisa que não gosto do seu código é o cascade.. Principalmente o ALL. O problema do cascade é que o lugar onde vc chama o merge, ou qualquer outro método, não deixa claro que mais entidades vão ser mergeadas também... Eu tiraria o merge e faria o merge/persit de cada entidade presente na operação.