Hibernate JPA Cascade Types

vi lärde oss om kartläggning av associerade enheter i hibernate redan i tidigare handledning som en-till-en-kartläggning och en-till-många mappningar. Där ville vi spara den mappade enheten när relationsägarens enhet blev sparad. För att aktivera detta hade vi använda ”CascadeType” attribut. I denna JPA Cascade Types handledning kommer vi att lära oss om olika typer av tillgängliga alternativ för cascading via CascadeType.

hur JPA-Kaskadtyper fungerar?

innan vi går vidare, Låt oss titta på hur detta kaskadtypsattribut definieras i din kod. Låt oss få ett exempel för tydligare förståelse. Ta ett scenario där en anställd kan ha flera konton; men ett konto måste vara kopplat till endast en anställd. Låt oss skapa enheter med minimal information för tydlighetens skull.

EmployeeEntity.java

AccountEntity.java

titta på den djärva raden i ovanstående källkod för EmployeeEntity.java. Det definierar ”cascade=CascadeType.ALL”och det betyder i huvudsak att någon förändring hände på EmployeeEntity måste kaskad till AccountEntity också. Om du sparar en anställd sparas också alla tillhörande konton i databasen. Om du tar bort en anställd raderas också alla konton som är kopplade till den anställde. Enkelt nog.

men vad händer om vi bara vill kaskad bara spara operationer men inte radera operation. Då måste vi tydligt ange det med hjälp av nedanstående kod.

nu bara när save() eller persist() metoder anropas med anställd instans då endast konton kommer att kvarstå. Om någon annan metod anropas session, dess effekt kommer inte att påverka/kaskad till konton.

JPA-Kaskadtyper

kaskadtyperna som stöds av Java-Persistensarkitekturen är enligt nedan:

  1. CascadeType.Kvarstår: kaskadtyp presist betyder att spara() eller kvarstår() operationer kaskad till relaterade enheter.
  2. CascadeType.SAMMAN : kaskadtyp merge betyder att relaterade enheter slås samman när den ägande enheten slås samman.
  3. CascadeType.REFRESH: cascade type refresh gör samma sak för funktionen refresh ().
  4. CascadeType.Ta bort: cascade type remove tar bort alla relaterade enheter associering med den här inställningen när den ägande enheten tas bort.
  5. CascadeType.Ta bort: kaskadtyp detach tar bort alla relaterade enheter om en” manuell ta bort ” inträffar.
  6. CascadeType.ALLT : kaskadtyp all är förkortning för alla ovanstående kaskadoperationer.

det finns ingen standardkaskadtyp i JPA. Som standard är inga operationer kaskad.

alternativet kaskadkonfiguration accepterar en rad Kaskadetyper; om du bara vill inkludera uppdateringar och sammanslagningar i kaskadoperationen för en en-till-många-relation som i vårt exempel kan du se följande:

ovanför kaskad kommer att orsaka att kontosamling bara slås samman och uppdateras.

Hibernate Cascade Types

Nu kan vi förstå vad som är cascade i hibernate i vilket scenario vi använder det.

förutom JPA-tillhandahållna kaskadtyper finns det ytterligare en kaskadoperation i viloläge som inte ingår i den normala uppsättningen ovan diskuterad, kallad ”orphan removal”. Detta tar bort ett ägt objekt från databasen när det tas bort från sin ägande relation.

låt oss förstå med ett exempel. I vårt exempel på anställd och Kontoenhet har jag uppdaterat dem enligt nedan och nämnt ”orphanRemoval = true” på konton. Det innebär i huvudsak att när jag kommer att ta bort ett ’konto från konton set’ (vilket innebär att jag tar bort förhållandet mellan det kontot och anställd); konto enhet som inte är associerad med någon annan anställd på databasen (dvs. föräldralös) bör också tas bort.

EmployeeEntity.java

AccountEntity.java

TestOrphanRemovalCascade.java

det är ett mycket bra sätt att ta bort matchande/felaktiga objekt från en samling (dvs. många-till-en eller en-till-många relationer). Du tar bara bort objektet från samlingen och viloläge tar hand om resten av sakerna åt dig. Det kommer att kontrollera om entitet refereras från någon plats eller inte; om det inte är så kommer det att ta bort entiteten från databasen själv.

Låt mig veta om dina tankar och frågor om hibernate 5 cascade typer eller JPA cascade typer, om några.

lyckligt lärande !!

Oracle blogg på kaskadtyper

var det här inlägget till hjälp?

Låt oss veta om du gillade inlägget. Det är det enda sättet vi kan förbättra.
Ja
Nej

Lämna ett svar

Din e-postadress kommer inte publiceras.