Inny obiekt o tej samej wartości identyfikatora był już powiązany z sesją: 398fdbba-57b8-4d3d-b84b-4c0c0b497f02, jednostka: XXX
Spotkałem ten błąd łącznie dwa razy i nigdy nie znalazłem dobrego rozwiązania, a ten błąd się pojawił
Powód jest prawdopodobnie dobrze znany, ponieważ w hibernacji w tej samej sesji pojawiają się dwa identyczne logotypy
Jednak jeśli jest to inna jednostka, ten błąd zostanie zgłoszony podczas uruchamiania operacji saveOrUpdate(object).
Hehe, może powiesz, że nie ma różnicy między tym, co mówisz, a tym, czego nie mówisz, przyznaję, hehe, nie znam szczegółów
Dlaczego ten błąd się pojawił, bo inaczej nie zostałby rozwiązany przez długi czas, teraz podaj tymczasowy błąd
Rozwiązaniem jest dać ludziom takim jak ja, którzy nie mają sposobu znaleźć przyczyny, sposób na dalsze wdrażanie
(Oczywiście jest poprawny, ale nie zaczyna się od przyczyny) W rzeczywistości rozwiązanie tego problemu jest bardzo proste, wystarczy wykonać operację session.clean()
Ale wykonałeś operację saveOrUpdate(object) po operacji clean, co jest możliwe
"Znalazłem dwie reprezentacje tej samej kolekcji", szukałem wielu informacji.
Nie ma dobrego wyjaśnienia, w czym ten artykuł pomaga najbardziej
http://opensource.atlassian.com/projects/hibernate/browse/HHH-509。
Na koniec można to rozwiązać metodą session.refresh(object), zauważ, że gdy obiekt nie jest
Jeśli jest to obiekt z danymi w bazie danych, nie możesz użyć współczynnika session.refresh(object)
Dla odświeżania polega na ponownym pobraniu obiektu z sesji hibernacyjnej, jeśli w sesji nie ma obiektu
Jeśli ten obiekt występuje, zostanie zgłoszony błąd, więc musisz ocenić sytuację przed użyciem saveOrUpdate(object).
Złam to
Oczywiście najprostszym rozwiązaniem tego problemu jest użycie merge(), który jest dołączony do Hibernate.
Metoda. Jednak zawsze czuję, że gdy napotykam problemy, korzystam z bardzo przydatnej metody dołączonej do tego oprogramowania
(w porównaniu do saveOrUpdate(), save(), update()) wydaje się bardzo nieprzyjemne. Później zauważyłem też, że ten błąd często pojawia się w mapowaniu jeden do wielu oraz wielokrotnie – proszę być tutaj
Uważaj przy mapowaniu jeden do wielu i wielu do wielu Rozwiązywanie problemów i obsługa hibernacji 1、Inny obiekt o tej samej wartości identyfikatora był już powiązany z sesją。 Błąd: W hibernacji w tej samej sesji występują dwie identyczne tożsamości, ale różne byty. Obejście 1: session.clean() PS: Jeśli wykonasz operacje zmieniające stan danych, takie jak saveOrUpdate(object) po operacji czystej, możesz otrzymać wyjątek "Znalazłem dwie reprezentacje tej samej kolekcji". Obejście 2: session.refresh(object) PS: Gdy obiekt nie jest obiektem z danymi w bazie danych, nie można użyć session.refresh(object), ponieważ metoda polega na ponownym pobieraniu obiektu z sesji hibernacyjnej; jeśli w sesji nie ma obiektu, zostanie zgłoszony błąd, więc trzeba ocenić przed użyciem saveOrUpdate(object). Rozwiązanie 3: session.merge(object) PS: Zalecana jest własna metoda Hibernate. 2、Znaleziono dwie reprezentacje tej samej kolekcji Przyczyna błędu: Zobacz 1. Obejście: session.merge(object) Powyższe dwie anomalie często pojawiają się w mapowaniu jeden do wielu oraz w odwzorowaniu wielu-do-wielu
Błąd powoduje:
Mit:Nie możesz utworzyć nowego obiektu użytkownika, a następnie uzyskać informacji o użytkowniku na podstawie identyfikatora użytkownika i przypisać go do tego obiektu, tak aby inny obiekt o tej samej wartości identyfikatora był już powiązany z błędem sesji!!
|