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í:
- CascadeType.PERSIST : cascade type
presist
znamená, že operace save() nebo persist() kaskádují spřízněným entitám. - CascadeType.SLOUČIT : cascade type
merge
znamená, že spřízněné entity jsou sloučeny, když je sloučena vlastnící entita. - CascadeType.REFRESH: cascade type
refresh
dělá totéž pro operaci refresh (). - CascadeType.Odstranit: cascade type
remove
odstraní všechny související entity přidružené k tomuto nastavení, když je vlastní entita odstraněna. - CascadeType.Odpojit: Typ kaskády
detach
odpojí všechny související entity, pokud dojde k“ manuálnímu odpojení“. - 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