Maison >Java >javaDidacticiel >Pourquoi est-ce que je reçois une exception « Objet en double avec le même identifiant » dans Hibernate ?
Problème :
Lors de l'utilisation de session.saveOrUpdate(e) avec un objet qui a une relation avec d'autres entités, une exception peut être levée indiquant qu'un "objet différent avec la même valeur d'identifiant était déjà associé à la session."
Explication :
Cette exception se produit lorsqu'Hibernate détecte plusieurs instances de la même entité avec le même identifiant au sein d'une seule session. Voici une illustration simplifiée de la situation :
Solution :
La solution dépend du comportement souhaité :
1. Entretenir des relations via la fusion :
Pour éviter les instances en double, utilisez session.merge(e) au lieu de saveOrUpdate. La fusion suppose que l'instance détachée de l'entité (l'entité A dans ce cas) doit être attachée à la session et que toutes les modifications doivent être fusionnées dans la version jointe.
2. Assurer la cohérence de l'affectation :
Si vous souhaitez continuer à utiliser saveOrUpdate, assurez-vous que la même instance de l'entité est attribuée à toutes les entités associées. Cela signifie que lors de l'ajout de l'entité A aux relations de l'entité B et de l'entité C, la même instance de l'entité A doit être utilisée.
Exemple :
<code class="java">// Ensuring the same instance of rolebean is assigned to both userbean and groupbean rolebean.setUserbean(userbean); groupbean.getGroups().add(rolebean);</code>
Remarque :
Le correctif spécifique dépend du code qui effectue la mission. Il est essentiel de s'assurer que la même instance de l'entité est utilisée lors de l'établissement des relations pour éviter le problème d'objet en double.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!