In sostanza ho alcuni oggetti in questa configurazione (il modello di dati reale è un po 'più complesso):
- A ha una relazione molti-a-molti con B. (B ha
inverse="true"
) - B ha una relazione molti-a-uno con C. (ho
cascade
deciso di"save-update"
) - C è una sorta di tabella tipo / categoria.
Inoltre, dovrei probabilmente menzionare che le chiavi primarie vengono generate dal database al momento del salvataggio.
Con i miei dati, a volte mi imbatto in problemi in cui A ha un insieme di oggetti B diversi e questi oggetti B si riferiscono allo stesso oggetto C.
Quando chiamo session.saveOrUpdate(myAObject)
, ottengo un errore hibernate dicendo: "a different object with the same identifier value was already associated with the session: C"
. So che l'ibernazione non può inserire / aggiornare / eliminare lo stesso oggetto due volte nella stessa sessione, ma c'è un modo per aggirare questo? Questa non sembra essere una situazione così insolita.
Durante la mia ricerca su questo problema, ho visto persone suggerire l'uso di session.merge()
, ma quando lo faccio, qualsiasi oggetto "in conflitto" viene inserito nel database come oggetti vuoti con tutti i valori impostati su null. Chiaramente non è quello che vogliamo.
[Modifica] Un'altra cosa che ho dimenticato di menzionare è che (per ragioni architettoniche al di fuori del mio controllo), ogni lettura o scrittura deve essere eseguita in una sessione separata.