am aflat despre cartografiere entități asociate în hibernate deja în tutoriale anterioare, cum ar fi unu-la-unu de cartografiere și unu-la-multe mapări. Acolo am vrut să salvăm entitatea mapată ori de câte ori entitatea proprietarului relației a fost salvată. Pentru a activa acest lucru, am folosit atributul” CascadeType”. În acest tutorial JPA Cascade Types, vom afla despre diferite tipuri de opțiuni disponibile pentru cascadă prin CascadeType.
cum funcționează tipurile de cascadă JPA?
înainte de a merge mai departe, să ne uităm la modul în care acest atribut tip cascadă este definit în codul. Să avem un exemplu pentru o înțelegere mai clară. Luați un scenariu în care un angajat poate avea mai multe conturi; dar un cont trebuie asociat cu un singur angajat. Să creăm entități cu informații minime din motive de claritate.
EmployeeEntity.java
AccountEntity.java
Uită-te la linia aldină din codul sursă de mai sus pentruEmployeeEntity.java
. Acesta definește ” cascade=CascadeType.ALL
„și în esență înseamnă că orice schimbare sa întâmplat pe EmployeeEntity
trebuie să cascadă la AccountEntity
de asemenea. Dacă salvați un angajat, atunci toate conturile asociate vor fi salvate și în baza de date. Dacă ștergeți un angajat, atunci toate conturile asociate cu acel angajat, de asemenea, să fie șterse. Destul de simplu.
dar dacă vrem doar să salvăm în cascadă doar operațiile, dar nu să ștergem operația. Apoi, trebuie să o specificăm clar folosind codul de mai jos.
acum, numai atunci când save() sau persist() metode sunt numite folosind instanță angajat, atunci numai conturile vor fi persistat. Dacă orice altă metodă este apelată la sesiune, efectul acesteia nu va afecta/Cascada conturilor.
tipuri de Cascade JPA
tipurile de cascade acceptate de arhitectura java Persistence sunt următoarele:
- CascadeType.PERSIST: cascade type
presist
înseamnă că operațiunile save() sau persist() se desfășoară în cascadă către entități asociate. - CascadeType.MERGE : tip cascadă
merge
înseamnă că entitățile asociate sunt fuzionate atunci când entitatea deținătoare este fuzionată. - CascadeType.REFRESH: cascade type
refresh
face același lucru pentru operația refresh (). - CascadeType.REMOVE: cascade type
remove
elimină asocierea tuturor entităților asociate cu această setare atunci când entitatea deținătoare este ștearsă. - CascadeType.Detașare: tip cascadă
detach
detașează toate entitățile asociate dacă apare o” detașare manuală”. - CascadeType.Toate : tip cascadă
all
este prescurtare pentru toate operațiile de cascadă de mai sus.
nu există un tip de cascadă implicit în JPA. În mod implicit, nu există operațiuni în cascadă.
opțiunea de configurare în cascadă acceptă o serie de tipuri de cascadă; astfel, pentru a include doar reîmprospătări și fuziuni în operația în cascadă pentru o relație unu-la-mulți ca în exemplul nostru, este posibil să vedeți următoarele:
deasupra cascadei va face ca colecția de conturi să fie doar îmbinată și reîmprospătată.
Hibernate Cascade Types
acum vă permite să înțeleagă ce este cascadă în hibernare în care scenariul îl folosim.
în afară de tipurile de cascadă furnizate de JPA, există încă o operație în cascadă în hibernate care nu face parte din setul normal discutat mai sus, numit „eliminarea orfanilor”. Aceasta elimină un obiect deținut din Baza de date atunci când este eliminat din relația sa deținătoare.
să înțelegem cu un exemplu. În exemplul nostru de angajat și entitate cont, le-am actualizat ca mai jos și am menționat „orphanRemoval = true” în conturi. În esență, înseamnă că ori de câte ori voi elimina un ‘cont din setul de conturi’ (ceea ce înseamnă că elimin relația dintre acel cont și angajat); entitatea contului care nu este asociată cu niciun alt angajat din Baza de date (adică orfan) ar trebui, de asemenea, să fie ștearsă.
EmployeeEntity.java
AccountEntity.java
TestOrphanRemovalCascade.java
este o modalitate foarte bună de a elimina elementele de potrivire/nepotrivire dintr-o colecție (de exemplu, multe-la-unu sau unu-la-mai multe relații). Trebuie doar să eliminați elementul din colecție și hibernare avea grijă de restul lucrurilor pentru tine. Acesta va verifica dacă entitatea este menționată din orice loc sau nu; dacă nu este, atunci va șterge entitatea din Baza de date în sine.
Lasă-mă să știu de gândurile și întrebările pe hibernate 5 tipuri de cascade sau tipuri de cascade JPA, dacă este cazul.
învățare fericită !!
Oracle Blog pe tipuri de cascade