Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 21246|Antwoord: 0

[Bron] Een ander object met dezelfde identificatiewaarde was al gekoppeld aan...

[Link kopiëren]
Geplaatst op 01-07-2016 10:48:52 | | | |
Een ander object met dezelfde identificatiewaarde was al aan de sessie gekoppeld: 398fdbba-57B8-4D3D-B84B-4C0C0B497F02, van entiteit: XXX



Ik ben deze fout in totaal twee keer tegengekomen, en ik heb nooit een goede oplossing gevonden, en deze fout deed zich voor

De reden hiervoor is waarschijnlijk algemeen bekend, omdat er in winterslaap twee identieke logo's in dezelfde sessie zijn

Als het echter een andere entiteit is, wordt deze fout gerapporteerd bij het uitvoeren van de saveOrUpdate(object)-operatie.

Hehe, misschien zeg je dat er geen verschil is tussen wat je zegt en wat je niet zegt, ik geef toe, hehe, ik ken de details niet

Waarom deze fout is ontstaan, anders was het lange tijd niet opgelost, geef nu een tijdelijke

De oplossing is om mensen zoals ik, die geen manier hebben om de oorzaak te vinden, een manier te geven om door te gaan met het implementeren

(Natuurlijk klopt het, maar het begint niet met de oorzaak)
    Het is eigenlijk heel eenvoudig om dit probleem op te lossen, voer gewoon de sessie.clean()-operatie uit

Maar je hebt de saveOrUpdate(object)-operatie uitgevoerd na de clean-operatie, wat mogelijk is

"Twee weergaven van dezelfde collectie gevonden", ik heb veel informatie gezocht.

Er is geen goede verklaring, waarvan dit artikel het meest helpt

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

Tot slot kan het worden opgelost met de session.refresh(object)-methode, let op dat wanneer het object niet is

Als het een object is met data in de database, kun je de session.refresh(object)-factor niet gebruiken

Voor verversen is het opnieuw bevatten van het object vanuit de sluimersessie, als er geen object in de sessie is

Als er dit object is, wordt er een foutmelding gemeld, dus je moet beoordelen voordat je saveOrUpdate(object) gebruikt.

Breek het

    Natuurlijk is de makkelijkste oplossing voor dit probleem het gebruik van de merge() die bij Hibernate hoort.

methode. Toch heb ik altijd het gevoel dat ik, wanneer ik problemen tegenkom, de zeer nuttige methode gebruik die bij deze software hoort

(vergeleken met saveOrUpdate(), save(), update()) voelt erg onaangenaam aan.
    Later ontdekte ik ook dat deze fout vaak voorkomt bij één-op-veel-mapping en veel-op-veel mapping, wees hier alsjeblieft

Wees voorzichtig bij het gebruik van één-op-veel en veele-op-veel toewijzingen
Hibernate Probleemoplossing en Behandeling
1、een ander object met dezelfde identificatiewaarde was al aan de sessie gekoppeld。
Foutreden: In winterslaap zijn er twee identieke identiteiten in dezelfde sessie, maar met verschillende entiteiten.
Workaround 1: session.clean()
PS: Als je na de clean-operatie behandelingen uitvoert om de datastatus te wijzigen, zoals saveOrUpdate(object), kun je een uitzondering krijgen "Twee representaties van dezelfde collectie gevonden".
Workaround 2: session.refresh(object)
PS: Wanneer het object geen object is met data in de database, kun je session.refresh(object) niet gebruiken omdat de methode is om het object te refetchen vanuit de hibernatiesessie; als er geen object in de sessie is, wordt er een foutmelding gemeld, dus je moet eerst beoordelen voordat je saveOrUpdate(object) gebruikt.
Oplossing 3: session.merge(object)
PS: Hibernate's eigen methode wordt aanbevolen.
2、Twee weergaven van dezelfde collectie gevonden
Foutoorzaak: Zie 1.
Omwegoplossing: session.merge(object)
De bovenstaande twee anomalieën komen vaak voor in één-op-veel mapping en veel-op-veel mapping




Foutoorzaken:

Mythe:Je kunt geen nieuw gebruikersobject aanmaken en vervolgens de gebruikersinformatie op basis van de gebruikers-ID krijgen en deze aan dit object toewijzen, zodat een ander object met dezelfde identifierwaarde al gekoppeld was aan de sessiefout!!





Vorig:Gebruik van dynamische in C# 4.0
Volgend:Ondiepe replicatie van c#-objecten kloonen
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com