Hibernate JPA Kaskády Typy

učili Jsme se o mapování přidružené subjekty ve spánku již v předchozí výukové programy jako one-to-one mapování a jeden-k-mnoha mapování. Tam jsme chtěli mapovanou entitu uložit vždy, když se entita vlastníka vztahu uložila. K tomu jsme použili atribut“ CascadeType“. V tomto tutoriálu typů kaskád JPA se dozvíme o různých typech dostupných možností kaskádování pomocí CascadeType.

jak fungují typy kaskád JPA?

před posunem vpřed se podívejme, jak je tento atribut typu cascade definován ve vašem kódu. Vezměme si příklad pro jasnější pochopení. Vezměte si scénář, kdy zaměstnanec může mít více účtů; ale jeden účet musí být spojen pouze s jedním zaměstnancem. Vytvořme entity s minimálními informacemi pro přehlednost.

zaměstnanec.java

AccountEntity.java

podívejte se na tučný řádek ve výše uvedeném zdrojovém kódu pro EmployeeEntity.java. To definuje „cascade=CascadeType.ALL“ a to v podstatě znamená, že jakékoliv změny se stalo na EmployeeEntity musí kaskády, aby AccountEntity stejně. Pokud uložíte zaměstnance, všechny přidružené účty budou také uloženy do databáze. Pokud odstraníte zaměstnance, budou odstraněny také všechny účty spojené s tímto zaměstnancem. Dost jednoduché.

ale co když chceme kaskádovat pouze operace, ale ne odstranit operaci. Pak ji musíme jasně specifikovat pomocí níže uvedeného kódu.

nyní pouze tehdy, když save() nebo persist () metody jsou volány pomocí instance zaměstnance pak pouze účty budou přetrvával. Pokud je v relaci vyvolána jiná metoda, nebude mít vliv na / kaskádu účtů.

JPA Kaskády Typy

kaskádové typy podporovaných Java Persistence Architektury jsou následující:

  1. CascadeType.PERSIST : cascade type presist znamená, že operace save() nebo persist() kaskádují spřízněným entitám.
  2. CascadeType.SLOUČIT : cascade type merge znamená, že spřízněné entity jsou sloučeny, když je sloučena vlastnící entita.
  3. CascadeType.REFRESH: cascade type refresh dělá totéž pro operaci refresh ().
  4. CascadeType.Odstranit: cascade type remove odstraní všechny související entity přidružené k tomuto nastavení, když je vlastní entita odstraněna.
  5. CascadeType.Odpojit: Typ kaskády detach odpojí všechny související entity, pokud dojde k“ manuálnímu odpojení“.
  6. CascadeType.VŠECHEN : Typ kaskády all je zkratka pro všechny výše uvedené kaskádové operace.

v JPA není výchozí typ kaskády. Ve výchozím nastavení nejsou kaskádové žádné operace.

kaskády možnost konfigurace přijímá pole CascadeTypes; tak, aby zahrnoval pouze osvěžuje a přechází v kaskádu operace pro Jeden-to-many vztah, jako v našem příkladu, můžete vidět následující:

Výše kaskádové způsobí, že účty kolekce pouze sloučeny a svěží.

hibernace kaskádových typů

nyní umožňuje pochopit, co je kaskáda v režimu spánku, ve kterém scénáři ji používáme.

kromě kaskádových typů JPA existuje ještě jedna kaskádová operace v režimu hibernace, která není součástí výše popsané normální množiny, nazvaná „odstranění sirotků“. Tím se odstraní vlastněný objekt z databáze, když je odstraněn z vlastnického vztahu.

rozumíme příkladem. V našem příkladu zaměstnance a účetní jednotky jsem je aktualizoval níže a zmínil jsem“ orphanRemoval = true “ na účtech. V podstatě to znamená, že kdykoli odstraním „účet ze sady účtů“ (což znamená, že odstraním vztah mezi tímto účtem a zaměstnancem); účetní jednotka, která není spojena s žádným jiným zaměstnancem v databázi (tj.

zaměstnanec.java

AccountEntity.java

TestOrphanRemovalCascade.java

je to velmi dobrý způsob, jak odstranit odpovídající / neshodující položky ze sbírky (tj. Stačí odebrat položku ze sbírky a hibernace postarat se o zbytek věcí pro vás. Zkontroluje, zda je entita odkazována z jakéhokoli místa nebo ne; pokud tomu tak není, odstraní entitu ze samotné databáze.

Dejte mi vědět vaše myšlenky a otázky týkající se hibernace 5 cascade typy nebo SPS kaskádové typy, pokud existuje.

šťastné učení !!

Oracle Blog o kaskádových typech

byl tento příspěvek užitečný?

dejte nám vědět, pokud se vám příspěvek líbil. Jedině tak se můžeme zlepšit.
Ano
ne

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.