Cascata in (N) Hibernate, che le regole ho bisogno?
-
19-09-2019 - |
Domanda
Scusate se questa è una vittima, non riusciva a trovare lo sbagliando di poco davvero sapere cosa cercare, in ogni caso ...
Ho tre classi, Parent
, Child
e Other
Parent
ha molti Child
in cui bambino ha una colonna Parent_Id
Other
contiene un riferimento a un Child
attraverso una colonna Child_Id
Quando si elimina un Parent
, voglio anche eliminare tutti gli oggetti Child
associati. Se questi oggetti Child
fanno riferimento tutte le classi Other
, voglio che loro (gli oggetti Other
) riferimenti Child_Id
per essere annullate.
Quali regole a cascata ho bisogno sulle due relazioni?
Inoltre, la volontà NHibernate aggiornamento entità in-memory, nonché nel database?
vale a dire. se ho un po 'di Parent
, Child
e Other
in memoria (cioè caricati da db, non transitorio) e dire NH per eliminare un Parent
, che cosa accadrà? Presumo gli oggetti Parent
e Child
diventeranno transitoria? Cosa succederà alla proprietà Child
di tutti gli oggetti Other
?
Edit: quando si utilizza All-Delete-Orfano, quali classi un oggetto come un orfano? Nell'esempio di cui sopra, è un Child
orfano se Parent
genitore viene eliminato? Fa il riferimento dalla materia Other
quando si considera un'entità come orfano?
Grazie
Soluzione
NH non aggiorna le tue entità in memoria (ad eccezione di Ids e versioni). NH non è responsabile per la gestione dei rapporti di voi entità. Persiste solo quello che hai fatto in memoria al database.
Da questo punto di vista dovrebbe diventare più facile da capire.
cascade="delete"
significa che quando il genitore viene eliminato, il bambino viene eliminato pure.
mezzi cascade="delete-orphan"
, che in aggiunta, il bambino è anche eliminati se nessun riferimento genitore più. Questo, naturalmente, funziona solo se il bambino è nella sessione.
L'istanza viene eliminata transitoria in memoria. I riferimenti al grado transitorio (da Other
) causerà un'eccezione. Per quanto ne so, è necessario rimuovere riferimento a casi cancellati da soli. Probabilmente si può rendere implicita da parte di alcuni trucchi, ma dubito che questo sarà pulito. E 'la logica di business.
Per le relazioni tra genitori e figli, cascade="all-delete-orphan"
è appropriato.
Per avere un riferimento regolare preferisco cascade="none"
.