że zasadniczo mają kilka przedmiotów w tej konfiguracji (model danych rzeczywistych jest nieco bardziej skomplikowana)hibernacji błędu: inny obiekt o tej samej wartości identyfikatora już związane z sesją
- A ma wiele -to-wielu B. (B posiada
inverse="true"
) - B ma związek wiele-do-jednego z C (mam
cascade
zestaw do"save-update"
) - C jest rodzajem typ/kategorii tabeli.
Ponadto, powinienem wspomnieć, że klucze podstawowe są generowane przez bazę danych przy zapisie.
Z moimi danymi, czasami napotykam na problemy, w których A ma zestaw różnych obiektów B, a te obiekty B odnoszą się do tego samego obiektu C.
Po wywołaniu session.saveOrUpdate(myAObject)
pojawia się błąd hibernacji z informacją: "a different object with the same identifier value was already associated with the session: C"
. Wiem, że hibernacja nie może wstawić/zaktualizować/usunąć tego samego obiektu dwa razy w tej samej sesji, ale czy jest jakiś sposób obejścia tego? Nie wydaje się, żeby to było niezbyt częste.
Podczas moich badań tego problemu widziałem, jak ludzie sugerują użycie session.merge()
, ale kiedy to zrobię, wszelkie "sprzeczne" obiekty zostaną wstawione do bazy danych jako puste obiekty z wszystkimi wartościami ustawionymi na wartość null. Oczywiście, tego nie chcemy.
[Edytuj] Kolejną rzeczą, o której zapomniałem wspomnieć, jest to, że (z przyczyn architektonicznych pozostających poza moją kontrolą) każdy odczyt lub zapis należy wykonać w oddzielnej sesji.
Zobacz, czy to [ ** Odpowiedź **] (http://stackoverflow.com/questions/1074081/hibernate-error-org-hibernate-nonuniqueobjectexception-a-different-object-with) pomaga .. – joaonlima