Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 21246|Risposta: 0

[Fonte] un oggetto diverso con lo stesso valore identificativo era già associato a...

[Copiato link]
Pubblicato su 01/07/2016 10:48:52 | | | |
Un oggetto diverso con lo stesso valore di identificatore era già associato alla sessione: 398fdbba-57b8-4d3d-b84b-4c0c0b497f02, di entità: XXX



Ho incontrato questo errore due volte in totale e non ho mai trovato una buona soluzione, e questo errore si è verificato

La ragione è probabilmente ben nota, perché in ibernazione ci sono due loghi identici nella stessa sessione

Tuttavia, se si tratta di un'entità diversa, questo errore verrà segnalato durante l'esecuzione dell'operazione saveOrUpdate(object).

Hehe, forse dirai che non c'è differenza tra quello che dici e quello che non dici, lo ammetto, hehe, non conosco i dettagli

Perché si è verificato questo errore? Altrimenti non sarebbe stato risolto per molto tempo, ora dai-ne uno temporaneo

La soluzione è dare a persone come me, che non hanno modo di trovare la causa principale, un modo per continuare a implementare

(Certo, è corretto, ma non parte dalla causa)
    In effetti, è molto semplice risolvere questo problema, basta eseguire l'operazione session.clean()

Ma hai eseguito l'operazione saveOrUpdate(object) dopo l'operazione di pulizia, il che è possibile

"Trovato due rappresentazioni della stessa collezione", cercai molte informazioni.

Non c'è una buona spiegazione, e questo articolo è la più utile

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

Infine, può essere risolto con il metodo session.refresh(object), si noti che quando l'oggetto non è

Se si tratta di un oggetto con dati nel database, non puoi usare il fattore session.refresh(object)

Per refresh serve riprendere l'oggetto dalla sessione di ibernazione, se non c'è alcun oggetto nella sessione

Se c'è questo oggetto, verrà segnalato un errore, quindi devi giudicare prima di usare saveOrUpdate(oggetto).

Rompilo

    Ovviamente, la soluzione più semplice a questo problema è usare il merge() che viene fornito con Hibernate.

Metodo. Tuttavia, ho sempre la sensazione che quando incontro problemi, uso il metodo molto utile che offre questo software

(rispetto a saveOrUpdate(), save(), update()) è molto sgradevole.
    Successivamente ho anche scoperto che questo errore si manifesta spesso nella mappatura uno-a-molti e nella mappatura molti-a-molti, per favore siate qui

Fai attenzione quando usi la mappatura uno-a-molti e molti-a-molti
Risoluzione e gestione di problemi di Ibernazione
1、un oggetto diverso con lo stesso valore di identificatore era già associato alla sessione。
Motivo dell'errore: In ibernazione, ci sono due identità identiche nella stessa sessione, ma entità diverse.
Soluzione alternativa 1: session.clean()
PS: Se esegui operazioni per modificare lo stato dei dati come saveOrUpdate(object) dopo l'operazione pulita, potresti ricevere un'eccezione "Trovate due rappresentazioni della stessa collezione".
Soluzione alternativa 2: session.refresh(object)
PS: Quando l'oggetto non è un oggetto con dati nel database, non puoi usare session.refresh(object) perché il metodo è recuperare l'oggetto dalla sessione di ibernazione; se non c'è un oggetto nella sessione, verrà segnalato un errore, quindi devi giudicare prima di usare saveOrUpdate(object).
Soluzione 3: session.merge(oggetto)
PS: È consigliato il metodo di Hibernate.
2、Trovato due rappresentazioni della stessa collezione
Causa dell'errore: Vedi 1.
Soluzione alternativa: session.merge(oggetto)
Le due anomalie sopra elencate compaiono spesso nella mappatura uno-a-molti e nella mappatura molti-a-molti




Cause dell'errore:

Mito:Non puoi creare un nuovo oggetto utente e poi ottenere le informazioni utente basate sull'ID utente e assegnarle a quell'oggetto, così che un oggetto diverso con lo stesso valore identificativo fosse già associato all'errore della sessione!!





Precedente:Uso della dinamica in C# 4.0
Prossimo:Clone della replicazione superficiale degli oggetti C#
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com