Was macht CascadeType.REFRESH eigentlich?

81

Was macht der CascadeType.REFRESHeigentlich?

Die Definition dafür ist

Wenn wir eine Entität aktualisieren, werden auch alle in diesem Feld enthaltenen Entitäten aktualisiert

aber was bedeutet das in der Praxis? Könnte mir bitte jemand ein einfaches Beispiel geben?

Kim L.
quelle

Antworten:

117

Die einzelnen CascadeType-Beschreibungen können etwas verwirrend sein, aber es gibt eine einfache Möglichkeit, dies anhand des allgemeinen Falls herauszufinden.

Für jeden der CascadeTypeWerte bedeutet dies, dass die Operation auch auf diese zugeordnete Entität angewendet wird , wenn eine Operation Xüber die EntityManagerSchnittstelle für eine Instanz aufgerufen wird und diese Instanz Verweise auf andere Entitätsinstanzen hat und diese Zuordnung CascadeType.Xdefiniert hat EntityManager.

Also EntityManager.refresh()ist definiert als:

Aktualisieren Sie den Status der Instanz aus der Datenbank und überschreiben Sie gegebenenfalls an der Entität vorgenommene Änderungen.

Wenn also Entität A einen Verweis auf Entität B hat und dieser Verweis mit Anmerkungen versehen @CascadeType.REFRESHund EntityManager.refresh(A)aufgerufen wird, EntityManager.refresh(B)wird er implizit auch aufgerufen.

Skaffman
quelle
Ich weiß, dass dies ein alter Beitrag ist, aber würde die Verwendung des obigen Beispiels für A und B, wenn die Instanz von B derzeit getrennt ist, ein CascadeType.PERSIST dazu führen, dass B persistent wird? Ich verwende die JPA-Implementierung von Hibernate.
Andy
4
Beantwortete meine eigene Frage. Antwort ist nein. Sie müssen save für das Objekt aufrufen, damit es dauerhaft bleibt.
Andy
Was passiert, wenn ich ein Objekt zusammenführe, das sich im dauerhaften Zustand befindet?
Abhijeet Pathak
9

Abrufen durch Aktualisieren: Verwaltete Objekte können mithilfe der Aktualisierungsmethode aus der Datenbank neu geladen werden:

Der Inhalt des verwalteten Objekts im Speicher wird verworfen (einschließlich etwaiger Änderungen) und durch Daten ersetzt, die aus der Datenbank abgerufen werden. Dies kann hilfreich sein, um sicherzustellen, dass die Anwendung die aktuellste Version eines Entitätsobjekts verarbeitet, nur für den Fall, dass es seit dem Abrufen von einem anderen EntityManager geändert wurde.

Quelle: http://www.objectdb.com/java/jpa/persistence/retrieve

Ethos
quelle