J'ai essentiellement quelques objets dans cette configuration (le modèle de données réel est un peu plus complexe) :
- A a une relation de plusieurs à plusieurs avec B. (B a
inverse="true"
) - B a une relation de plusieurs à un avec C. (J'ai
cascade
réglé sur"save-update"
) - C est une sorte de tableau de types/catégories.
En outre, je devrais probablement mentionner que les clés primaires sont générées par la base de données lors de la sauvegarde.
Avec mes données, je rencontre parfois des problèmes où A possède un ensemble d'objets B différents, et ces objets B font référence au même objet C.
Quand j'appelle session.saveOrUpdate(myAObject)
j'ai une erreur d'hibernation qui dit : "a different object with the same identifier value was already associated with the session: C"
. Je sais qu'Hibernate ne peut pas insérer/mettre à jour/supprimer le même objet deux fois dans la même session, mais existe-t-il un moyen de contourner ce problème ? Il semble que cette situation ne soit pas si rare.
Au cours de mes recherches sur ce problème, j'ai vu des personnes suggérer l'utilisation de session.merge()
Mais lorsque je fais cela, tous les objets "conflictuels" sont insérés dans la base de données en tant qu'objets vides avec toutes les valeurs définies comme nulles. Il est clair que ce n'est pas ce que nous voulons.
[Une autre chose que j'ai oublié de mentionner est que (pour des raisons architecturales indépendantes de ma volonté), chaque lecture ou écriture doit être effectuée dans une session séparée.