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!!
|