Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 21246|Răspunde: 0

[Sursă] un alt obiect cu aceeași valoare de identificator era deja asociat cu...

[Copiază linkul]
Postat pe 01.07.2016 10:48:52 | | | |
Un alt obiect cu aceeași valoare de identificator era deja asociat cu sesiunea: 398fdbba-57b8-4d3d-b84b-4c0c0b497f02, a entității: XXX



Am întâmpinat această eroare de două ori în total și nu am găsit niciodată o soluție bună, iar această eroare a apărut

Motivul este probabil bine cunoscut, deoarece în hibernare există două logo-uri identice în aceeași sesiune

Totuși, dacă este o entitate diferită, această eroare va fi raportată la rularea operațiunii saveOrUpdate(object).

Hehe, poate vei spune că nu există nicio diferență între ce spui și ce nu spui, recunosc, hehe, nu știu detaliile

De ce a apărut această eroare, altfel nu ar fi fost rezolvată pentru mult timp, acum, dă-mi una temporară

Soluția este să le oferim oamenilor ca mine, care nu au nicio cale de a găsi cauza principală, o modalitate de a continua să implementeze

(Desigur că este corect, dar nu începe cu cauza)
    De fapt, este foarte simplu să rezolvi această problemă, doar efectuează operațiunea session.clean()

Dar ai efectuat operația saveOrUpdate(object) după operația de curățare, ceea ce este posibil

"Am găsit două reprezentări ale aceleiași colecții", am căutat multe informații.

Nu există o explicație bună, iar acest articol ajută cel mai mult

http://opensource.atlassian.com/projects/hibernate/browse/HHH-509。

În final, poate fi rezolvat prin metoda session.refresh(object), rețineți că atunci când obiectul nu este

Dacă este un obiect cu date în baza de date, nu poți folosi factorul session.refresh(object)

Pentru refresh, obiectul este preluat din sesiunea de hibernare, dacă nu există niciun obiect în sesiune

Dacă există acest obiect, va fi raportată o eroare, așa că trebuie să judeci înainte de a folosi saveOrUpdate(object).

Rupe-l

    Desigur, cea mai simplă soluție la această problemă este să folosești merge() care vine odată cu Hibernate.

metodă. Totuși, simt mereu că atunci când întâmpin probleme, folosesc metoda foarte utilă care vine cu acest software

(comparativ cu saveOrUpdate(), save(), update()) se simte foarte neplăcut.
    Mai târziu am descoperit că această eroare apare adesea în maparea unu-la-multe și în maparea multe-la-mulți, vă rog să fiți aici

Fii atent când folosești maparea unu-la-mulți și mulți-la-mulți
Depanarea și gestionarea Hibernate
1、un obiect diferit cu aceeași valoare de identificator era deja asociat cu sesiunea。
Motivul eroării: În hibernare, există două identități identice în aceeași sesiune, dar entități diferite.
Soluția 1: session.clean()
PS: Dacă efectuați operații pentru a schimba starea datelor, cum ar fi saveOrUpdate(object), după operația de curățare, este posibil să primiți o excepție "Au fost găsite două reprezentări ale aceleiași colecții".
Soluția 2: session.refresh(object)
PS: Când obiectul nu este un obiect cu date în baza de date, nu poți folosi session.refresh(object) deoarece metoda este să recuperezi obiectul din sesiunea hibernate; dacă nu există niciun obiect în sesiune, va fi raportată o eroare, deci trebuie să judeci înainte de a folosi saveOrUpdate(object).
Soluția 3: session.merge(object)
PS: Se recomandă metoda proprie a Hibernate.
2、Am găsit două reprezentări ale aceleiași colecții
Cauza eroarei: Vezi 1.
Soluție alternativă: session.merge(object)
Cele două anomalii de mai sus apar adesea în maparea unu-la-multe și în maparea multe-la-multe




Cauzele erorii:

Mit:Nu poți crea un nou obiect de utilizator și apoi să obții informațiile de utilizator pe baza ID-ului de utilizator și să le atribui acestui obiect, astfel încât un alt obiect cu aceeași valoare de identificator să fie deja asociat cu eroarea de sesiune!!





Precedent:Utilizarea dinamicii în C# 4.0
Următor:Clonează replicarea superficială a obiectelor C#
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com