Abbiamo imparato a mappare le entità associate in hibernate già in precedenti tutorial come la mappatura one-to-one e le mappature one-to-many. Lì volevamo salvare l’entità mappata ogni volta che l’entità del proprietario della relazione veniva salvata. Per abilitare questo abbiamo usato l’attributo “CascadeType”. In questo tutorial sui tipi di cascata JPA, impareremo a conoscere vari tipi di opzioni disponibili per il cascading tramite CascadeType.
Come funzionano i tipi a cascata JPA?
Prima di andare avanti, diamo un’occhiata a come questo attributo di tipo cascade è definito nel codice. Facciamo un esempio per una comprensione più chiara. Prendi uno scenario in cui un dipendente può avere più account; ma un account deve essere associato a un solo dipendente. Creiamo entità con informazioni minime per motivi di chiarezza.
EmployeeEntity.java
AccountEntity.java
Guarda la riga in grassetto sopra il codice sorgente per EmployeeEntity.java
. Definisce”cascade=CascadeType.ALL
“e significa essenzialmente che qualsiasi cambiamento è avvenuto suEmployeeEntity
deve cascata aAccountEntity
pure. Se si salva un dipendente, tutti gli account associati verranno salvati nel database. Se si elimina un dipendente, verranno eliminati anche tutti gli account associati a tale dipendente. Abbastanza semplice.
Ma cosa succede se vogliamo solo salvare in cascata solo le operazioni ma non eliminare l’operazione. Quindi dobbiamo specificarlo chiaramente usando il codice sottostante.
Ora solo quando i metodi save() o persist() vengono chiamati utilizzando l’istanza employee, solo gli account verranno mantenuti. Se qualsiasi altro metodo viene chiamato in sessione, il suo effetto non influirà/cascata sugli account.
Tipi a cascata JPA
I tipi a cascata supportati dall’architettura di persistenza Java sono i seguenti:
- CascadeType.PERSIST: cascade type
presist
significa che le operazioni save() o persist() cascade alle entità correlate. - Tipo a cascata.UNIRE : cascade type
merge
significa che le entità correlate vengono unite quando l’entità proprietaria viene unita. - Tipo a cascata.REFRESH: cascade type
refresh
fa la stessa cosa per l’operazione refresh (). - Tipo a cascata.REMOVE: cascade type
remove
rimuove tutte le associazioni di entità correlate con questa impostazione quando l’entità proprietaria viene eliminata. - Tipo a cascata.STACCA: cascade type
detach
stacca tutte le entità correlate se si verifica un” stacca manuale”. - Tipo a cascata.TUTTO : il tipo a cascata
all
è una scorciatoia per tutte le operazioni a cascata di cui sopra.
Non esiste un tipo a cascata predefinito in JPA. Per impostazione predefinita, nessuna operazione viene eseguita in cascata.
L’opzione di configurazione a cascata accetta un array di CascadeTypes; quindi, per includere solo gli aggiornamenti e le fusioni nell’operazione a cascata per una relazione uno-a-molti come nel nostro esempio, potresti vedere quanto segue:
Sopra cascading farà sì che la raccolta degli account venga solo unita e aggiornata.
Hibernate Cascade Types
Ora consente di capire cos’è cascade in hibernate in quale scenario lo usiamo.
Oltre ai tipi a cascata forniti da JPA, c’è un’altra operazione a cascata in hibernate che non fa parte del normale set sopra discusso, chiamata “rimozione orfana”. Questo rimuove un oggetto di proprietà dal database quando viene rimosso dalla sua relazione di proprietà.
Capiamo con un esempio. Nel nostro esempio di entità dipendente e account, li ho aggiornati come di seguito e ho menzionato “orphanRemoval = true” sui conti. Significa essenzialmente che ogni volta che rimuoverò un “account da account set” (il che significa che sto rimuovendo la relazione tra quell’account e Dipendente); anche l’entità dell’account che non è associata a nessun altro dipendente sul database (cioè orfano) dovrebbe essere eliminata.
EmployeeEntity.java
AccountEntity.java
TestOrphanRemovalCascade.java
È un ottimo modo per rimuovere gli elementi corrispondenti/non corrispondenti da una raccolta (cioè relazioni da molti a uno o da uno a molti). Basta rimuovere l’elemento dalla raccolta e ibernare prendersi cura di resto delle cose per voi. Controllerà se l’entità viene referenziata da qualsiasi luogo o meno; Se non lo è, eliminerà l’entità dal database stesso.
Fammi sapere dei tuoi pensieri e domande sui tipi di cascata hibernate 5 o sui tipi di cascata JPA, se presenti.
Buon apprendimento !!
Oracle Blog sui tipi a cascata
Questo post è stato utile?