Maison  >  Article  >  Java  >  Pourquoi est-ce que j'obtiens l'erreur « un objet différent avec la même valeur d'identifiant était déjà associé à la session » dans le mappage plusieurs-à-plusieurs de myHibernate ?

Pourquoi est-ce que j'obtiens l'erreur « un objet différent avec la même valeur d'identifiant était déjà associé à la session » dans le mappage plusieurs-à-plusieurs de myHibernate ?

DDD
DDDoriginal
2024-10-28 16:18:14263parcourir

 Why am I getting

Erreur d'identifiant différent d'Hibernate dans le mappage plusieurs-à-plusieurs

L'erreur "un objet différent avec la même valeur d'identifiant était déjà associé au session" se produit lorsqu'Hibernate tente de sauvegarder un objet qui existe déjà dans la session. Dans ce cas, cela semble être lié à un mappage plusieurs-à-plusieurs impliquant les classes UserBean, GroupBean et RoleBean.

Dans le code fourni, le problème semble survenir lorsque la méthode saveOrUpdate est utilisée dans le fonction de sauvegarde. saveOrUpdate tente à la fois d'enregistrer et de mettre à jour les objets, et dans ce cas, il rencontre un objet rolebean#1 en double.

L'erreur suggère deux solutions possibles :

  • Utilisez session.merge( e) au lieu de session.saveOrUpdate(e) : cette méthode fusionne l'objet détaché avec l'objet persistant, évitant ainsi le conflit d'identifiant. Cependant, il peut également écraser les données existantes.
  • Identifiez la cause de l'objet rolebean#1 en double : inspectez le code dans lequel le bean rôle est attribué à la fois à l'utilisateur et au groupe et déterminez s'il existe un problème avec la façon dont les instances sont créées ou attribuées.

Le message d'exception indique que l'objet rolebean#1 a été enregistré deux fois dans la session, ce qui peut se produire si le même objet est affecté à plusieurs collections (userbean.groups et userbean.roles) sans être marqué comme une nouvelle instance dans chaque cas.

En comprenant le comportement d'Hibernate et en examinant le code où les objets sont attribués, il est possible de résoudre le problème et de garantir que les objets sont enregistrés et associés correctement au sein de la session.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn