Hibernate JPA Cascade Types

a társított entitások leképezéséről a hibernate programban már korábbi oktatóanyagokban, például egy az egyhez leképezésben és egy a sokhoz leképezésben tanultunk. Ott akartuk menteni a leképezett entitást, amikor a kapcsolattulajdonos entitás mentésre került. Ennek engedélyezéséhez a “CascadeType” attribútumot használtuk. Ebben a JPA Cascade Types oktatóanyagban megismerjük a CascadeType-on keresztüli lépcsőzetes lehetőségek különféle típusait.

hogyan működnek a JPA kaszkád típusok?

mielőtt továbblépnénk, nézzük meg, hogyan definiáljuk ezt a kaszkád típusú attribútumot a kódban. Vegyünk egy példát a világosabb megértésre. Vegyünk egy forgatókönyvet, ahol egy alkalmazottnak több fiókja is lehet; de egy fiókot csak egy alkalmazotthoz kell társítani. Hozzunk létre olyan entitásokat, amelyek minimális információval rendelkeznek az egyértelműség érdekében.

EmployeeEntity.java

AccountEntity.java

nézd meg a félkövér sort a fenti forráskódban EmployeeEntity.java. Ez határozza meg a “cascade=CascadeType.ALL” és ez lényegében azt jelenti, hogy minden változás történt EmployeeEntity kell kaszkád AccountEntity is. Ha egy alkalmazottat ment, akkor az összes társított fiók is mentésre kerül az adatbázisba. Ha töröl egy alkalmazottat, akkor az alkalmazotthoz társított összes fiók is törlődik. Elég egyszerű.

de mi van, ha csak a műveleteket akarjuk kaszkádolni, de a műveletet nem töröljük. Ezután egyértelműen meg kell adnunk az alábbi kód használatával.

most csak akkor, ha a save() vagy persist () metódusokat az alkalmazott példány használatával hívják meg, akkor csak a fiókok maradnak fenn. Ha bármilyen más módszert hívnak meg a munkamenetben, akkor ez a hatás nem befolyásolja a fiókok kaszkádját.

JPA kaszkád típusok

a Java Perzisztencia architektúra által támogatott kaszkád típusok a következők:

  1. CascadeType.PERSIST : cascade type presist azt jelenti, hogy save() vagy persist() műveletek kaszkád kapcsolódó entitások.
  2. CascadeType.MERGE : cascade type merge azt jelenti, hogy a kapcsolódó entitások összevonásra kerülnek, amikor a tulajdonos entitás összevonásra kerül.
  3. CascadeType.Frissítés: cascade type refresh ugyanezt teszi a refresh() művelettel.
  4. CascadeType.REMOVE: cascade type remove eltávolítja az összes kapcsolódó entitás társítását ezzel a beállítással, amikor a tulajdonos entitás törlődik.
  5. CascadeType.Leválasztás: kaszkád típus detach leválasztja az összes kapcsolódó entitást, ha “kézi leválasztás” történik.
  6. CascadeType.Minden : cascade type all a fenti kaszkád műveletek gyorsírása.

a JPA-ban nincs alapértelmezett kaszkád típus. Alapértelmezés szerint egyetlen művelet sem lépcsőzetes.

a cascade konfigurációs opció elfogadja a CascadeTypes tömbjét; így, ha csak frissítéseket és egyesítéseket tartalmaz a cascade műveletben egy-a-sokhoz kapcsolathoz, mint a példánkban, a következőket láthatja:

a cascading felett a fiókok gyűjteményét csak egyesíteni és frissíteni fogja.

hibernált kaszkád típusok

most lehetővé teszi, hogy megértsük, mi kaszkád hibernált, amelyben forgatókönyv használjuk.

a JPA által biztosított kaszkádtípusokon kívül van még egy lépcsőzetes művelet a hibernate-ben, amely nem része a fent tárgyalt normál halmaznak, az úgynevezett “árva eltávolítás”. Ez eltávolítja a tulajdonban lévő objektumot az adatbázisból, amikor eltávolítja a tulajdonosi kapcsolatból.

értsük meg egy példával. Alkalmazotti és fiók entitás példánkban frissítettem őket az alábbiak szerint, és megemlítettem az” orphanRemoval = true ” – t a számlákon. Ez lényegében azt jelenti, hogy valahányszor eltávolítok egy fiókot a fiókkészletből (ami azt jelenti, hogy megszüntetem az adott fiók és a munkavállaló közötti kapcsolatot); azt a fiók entitást is törölni kell, amely nem kapcsolódik az adatbázisban szereplő más alkalmazotthoz (azaz árva).

EmployeeEntity.java

AccountEntity.java

TestOrphanRemovalCascade.java

Ez egy nagyon jó módja annak, hogy eltávolítsuk a megfelelő/nem megfelelő elemeket egy gyűjteményből (azaz sok-egy vagy egy-sok kapcsolat). Csak távolítsa el az elemet a gyűjteményből, és hibernálja a többi dolgot az Ön számára. Ellenőrzi, hogy az entitásra bárhonnan hivatkoznak-e vagy sem; ha nem, akkor törli az entitást az adatbázisból.

tudassa velem gondolatait és kérdéseit a hibernate 5 kaszkád típusokkal vagy a JPA kaszkád típusokkal kapcsolatban, ha vannak ilyenek.

boldog tanulást !!

Oracle Blog a kaszkád típusokról

hasznos volt ez a bejegyzés?

tudassa velünk, ha tetszett a bejegyzés. Csak így tudunk fejlődni.
Igen
nem

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.