we hebben al geleerd over het toewijzen van geassocieerde entiteiten in hibernate in eerdere tutorials, zoals een-op-een toewijzing en een-op-veel toewijzingen. Daar wilden we de in kaart gebrachte entiteit te redden wanneer relatie eigenaar entiteit werd gered. Om dit in te schakelen hadden we “CascadeType” attribuut. In deze JPA Cascade Types tutorial, zullen we leren over verschillende soorten beschikbare opties voor cascading via CascadeType.
Hoe werken JPA Cascade Types?
voordat u verder gaat, laten we eens kijken hoe dit cascade type attribuut is gedefinieerd in uw code. Laten we een voorbeeld hebben voor meer duidelijk begrip. Neem een scenario waarbij een werknemer meerdere Accounts kan hebben; maar één account moet worden gekoppeld aan slechts één werknemer. Laten we entiteiten creëren met minimale informatie voor de duidelijkheid.
Aantal werknemers.java
AccountEntity.java
Kijk naar de vetgedrukte regel in bovenstaande broncode voor EmployeeEntity.java
. Het definieert “cascade=CascadeType.ALL
“en het betekent in wezen dat elke wijziging op EmployeeEntity
moet cascade naar AccountEntity
. Als u een werknemer opslaat, worden alle bijbehorende accounts ook opgeslagen in de database. Als u een werknemer verwijdert, worden alle accounts die aan die werknemer zijn gekoppeld ook verwijderd. Simpel genoeg.
maar wat als we alleen cascade alleen operaties opslaan maar niet verwijderen operatie. Dan moeten we duidelijk specificeren met behulp van onderstaande code.
nu alleen als save() of persist () methoden worden aangeroepen met behulp van employee instance dan zullen alleen accounts worden persisted. Als een andere methode wordt aangeroepen op Sessie, het effect zal niet van invloed/cascade naar accounts.
JPA Cascade Types
de cascade types ondersteund door de Java Persistence Architecture zijn als volgt:
- CascadeType.PERSIST: cascade type
presist
betekent dat save() of persist() operaties cascade naar gerelateerde entiteiten. - CascadeType.SAMENVOEGEN : cascade type
merge
betekent dat verbonden entiteiten worden samengevoegd wanneer de eigenaar wordt samengevoegd. - CascadeType.Vernieuwen: cascade type
refresh
doet hetzelfde voor de refresh() operatie. - CascadeType.Verwijderen: cascade type
remove
verwijdert alle gerelateerde entiteiten die geassocieerd zijn met deze instelling wanneer de eigenaar wordt verwijderd. - CascadeType.Ontkoppelen: cascade type
detach
maakt alle gerelateerde entiteiten los als een” handmatige ontkoppeling ” optreedt. - CascadeType.AL : cascade type
all
is een afkorting voor alle bovenstaande cascade operaties.
Er is geen standaard cascade type in JPA. Standaard worden er geen bewerkingen trapsgewijs uitgevoerd.
de cascade configuratie optie accepteert een array van CascadeTypes; dus, om alleen verversingen en merges in de cascade operatie op te nemen voor een een-op-veel relatie, zoals in ons voorbeeld, kunt u het volgende zien:
bovenstaande cascading zorgt ervoor dat accounts collectie alleen samengevoegd en vernieuwd wordt.
Hibernate Cascade Types
laat nu begrijpen wat cascade is in hibernate in welk scenario we het gebruiken.
behalve door JPA verstrekte cascade-types, is er nog een cascade-operatie in de winterslaap die geen deel uitmaakt van de normale set hierboven besproken, genaamd “weesverwijdering”. Dit verwijdert een eigendom object uit de database wanneer het is verwijderd uit de eigenaar relatie.
laten we het met een voorbeeld begrijpen. In het voorbeeld van onze werknemer en accountentiteit heb ik ze bijgewerkt zoals hieronder en heb ik “orphanRemoval = true” vermeld op accounts. Het betekent in wezen dat wanneer ik een ‘account uit accounts set’ zal verwijderen (wat betekent dat ik de relatie tussen die account en werknemer verwijder); de accountentiteit die niet is gekoppeld aan een andere werknemer in de database (dat wil zeggen wees) moet ook worden verwijderd.
Aantal werknemers.java
AccountEntity.java
TestOrphanRemovalCascade.java
Het is een zeer goede manier om de overeenkomende/mismatching items uit een collectie te verwijderen (dat wil zeggen veel-op-een of een-op-veel relaties). Je verwijdert gewoon het item uit de collectie en overwinteren zorgen voor de rest van de dingen voor u. Het zal controleren of entiteit wordt verwezen vanaf een plaats of niet; als het niet dan zal het verwijderen van de entiteit uit de database zelf.
laat me weten van uw gedachten en vragen over hibernate 5 cascade types of JPA cascade types, indien van toepassing.
Gelukkig leren !!
Oracle Blog over cascade types