J'ai essentiellement des objets dans cette configuration (le vrai modèle de données est un peu plus complexe):
- A a une relation plusieurs-à-plusieurs avec B. (B a
inverse="true"
) - B a une relation plusieurs-à-un avec C. (je me suis
cascade
mis à"save-update"
) - C est une sorte de table de type / catégorie.
De plus, 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 a un ensemble d'objets B différents, et ces objets B font référence au même objet C.
Quand je l' appelle session.saveOrUpdate(myAObject)
, je reçois une erreur veille prolongée en disant: "a different object with the same identifier value was already associated with the session: C"
. Je sais que hibernate ne peut pas insérer / mettre à jour / supprimer le même objet deux fois dans la même session, mais y a-t-il un moyen de contourner ce problème? Cela ne semble pas être une situation si rare.
Au cours de mes recherches sur ce problème, j'ai vu des gens suggérer l'utilisation de session.merge()
, mais lorsque je fais cela, tous les objets "en conflit" sont insérés dans la base de données en tant qu'objets vides avec toutes les valeurs définies sur null. Ce n'est clairement pas ce que nous voulons.
[Edit] 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 distincte.