Maison >Java >javaDidacticiel >Mise en veille prolongée : pourquoi `saveOrUpdate` lance-t-il `NonUniqueObjectException` lorsque vous travaillez avec des relations plusieurs-à-plusieurs ?
Hibernate : Confusion avec plusieurs objets de même identité
Problème :
Lors de la tentative de enregistrez ou mettez à jour un objet à l'aide de la méthode saveOrUpdate d'Hibernate, une exception est levée :
org.hibernate.NonUniqueObjectException : un objet différent avec la même valeur d'identifiant était déjà associé à la session
Contexte :
Le problème survient lorsqu'un objet, tel qu'un RoleBean, est affecté à plusieurs entités, telles qu'un UserBean et un GroupBean, au sein de la même transaction. Cela peut se produire lorsque l'objet a une relation plusieurs-à-plusieurs.
Par exemple, dans le scénario donné, RoleBean#1 est initialement attribué à GroupBean#1. Lorsque vous tentez de l'ajouter à UserBean#1 au cours de la même session, l'exception est rencontrée.
Résolution :
La cause de l'exception est l'existence de deux instances de l'objet RoleBean au sein de la session. Une instance est directement associée au UserBean, tandis que l'autre est indirectement associée via le GroupBean.
Pour résoudre ce problème, envisagez les options suivantes :
En implémentant l'une de ces approches, vous pouvez résoudre l'exception et garantir que les objets ayant la même identité sont correctement traités. au cours d'une seule session Hibernate.
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!