Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 21246|Odpowiedź: 0

[Źródło] inny obiekt o tej samej wartości identyfikatora był już powiązany z...

[Skopiuj link]
Opublikowano 01.07.2016 10:48:52 | | | |
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!!





Poprzedni:Zastosowanie dynamicznego w C# 4.0
Następny:Klonowanie płytkiej replikacji obiektów w języku C#
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com