Vi lærte om kortlægning af tilknyttede enheder i hibernate allerede i tidligere tutorials som en-til-en kortlægning og en-til-mange kortlægninger. Der ønskede vi at gemme den kortlagte enhed, når forholdet ejer enhed blev gemt. For at aktivere dette havde vi brug “CascadeType” attribut. I denne JPA Cascade Types tutorial lærer vi om forskellige typer tilgængelige muligheder for cascading via CascadeType.
hvordan JPA Cascade typer arbejde?
før vi går videre, lad os se på, hvordan denne kaskadetypeattribut er defineret i din kode. Lad os få et eksempel for mere klar forståelse. Tag et scenario, hvor en medarbejder kan have flere konti; men en konto skal kun være tilknyttet en medarbejder. Lad os oprette enheder med minimal information af hensyn til klarhed.
Medarbejderenhed.java
AccountEntity.java
se på den dristige linje i ovenstående kildekode for EmployeeEntity.java
. Det definerer”cascade=CascadeType.ALL
“og det betyder i det væsentlige, at enhver ændring skete på EmployeeEntity
skal kaskade til AccountEntity
også. Hvis du gemmer en medarbejder, gemmes alle tilknyttede konti også i databasen. Hvis du sletter en medarbejder, slettes alle konti, der er knyttet til den pågældende medarbejder, også. Simpelt nok.
men hvad nu hvis vi kun vil kaskade kun gemme operationer, men ikke slette operation. Så skal vi tydeligt angive det ved hjælp af nedenstående kode.
nu kun når Gem() eller vedvarende() metoder kaldes ved hjælp af medarbejderinstans, vil kun konti blive vedvarende. Hvis en anden metode kaldes på session, vil dens effekt ikke påvirke / kaskade til konti.
JPA Cascade typer
de kaskade typer understøttes af Java Persistens arkitektur er som nedenfor:
- CascadeType.Vedvarende: cascade type
presist
betyder, at gemme() eller fortsætte() operationer kaskade til relaterede enheder. - CascadeType.FUSIONERE : kaskadetype
merge
betyder, at relaterede enheder flettes, når den ejende enhed flettes. - CascadeType.REFRESH: cascade type
refresh
gør det samme for refresh() operationen. - CascadeType.REMOVE: cascade type
remove
fjerner alle relaterede enheder tilknytning til denne indstilling, når den ejende enhed slettes. - CascadeType.DETACH : cascade type
detach
løsner alle relaterede enheder, hvis der opstår en” manuel detach”. - CascadeType.ALLE : kaskadetype
all
er stenografi for alle ovennævnte kaskadeoperationer.
Der er ingen standard kaskadetype i JPA. Som standard er ingen operationer kaskade.
indstillingen kaskadekonfiguration accepterer en række Cascadetyper; hvis du således kun inkluderer opdateringer og fusioner i kaskadeoperationen for en en-til-mange-relation som i vores eksempel, kan du muligvis se følgende:
ovenfor kaskade vil medføre, at kontoindsamling kun flettes og opdateres.
Hibernate Cascade typer
lad os nu forstå, hvad der er cascade i hibernate i hvilket scenario vi bruger det.
bortset fra JPA leverede kaskadetyper, er der endnu en kaskadeoperation i dvaletilstand, som ikke er en del af det normale sæt ovenfor diskuteret, kaldet “forældreløs fjernelse”. Dette fjerner et ejet objekt fra databasen, når det fjernes fra dets ejerforhold.
lad os forstå med et eksempel. I vores eksempel på medarbejder-og Kontoenhed har jeg opdateret dem som nedenfor og nævnt “orphanRemoval = true” på konti. Det betyder i det væsentlige, at når jeg fjerner en ‘konto fra kontosæt’ (hvilket betyder, at jeg fjerner forholdet mellem denne konto og medarbejder); kontoenheden, der ikke er tilknyttet nogen anden medarbejder i databasen (dvs.forældreløs), skal også slettes.
Medarbejderenhed.java
AccountEntity.java
TestOrphanRemovalCascade.java
det er en meget god måde at fjerne de matchende/uoverensstemmende elementer fra en samling (dvs.mange-til-en eller en-til-mange relationer). Du skal bare fjerne varen fra indsamling og dvale tage sig af resten af tingene for dig. Det vil kontrollere, om der henvises til enhed fra ethvert sted eller ej; hvis det ikke er det, vil det slette enheden fra selve databasen.
Lad mig vide om dine tanker og spørgsmål om hibernate 5 cascade typer eller JPA cascade typer, hvis nogen.
glad læring !!
Oracle Blog on cascade types
var dette indlæg nyttigt?