Was bedeuten REFRESH und MERGE in Bezug auf Datenbanken?

93

Ich bin neugierig und muss diese Antwort schnell finden. Google wird nicht viel helfen.

Die Java-Persistenz-API verfügt über die folgenden Eigenschaften, mit denen das Framework angewiesen wird, Operationen an zugeordneten Entitäten zu kaskadieren:

CascadeType.PERSIST
CascadeType.DELETE
CascadeType.MERGE
CascadeType.REFRESH

Ich weiß, was die ersten beiden bedeuten: Wenn ich Objekt A mit B beibehalten habe, bleibe auch B bestehen, und wenn ich A lösche, lösche ich auch B.

Aber ich kann keinen Sinn daraus machen, was die anderen beiden erreichen. Hilfe?

André Chalella
quelle

Antworten:

79

REFRESH bedeutet "Statusänderungen aus der Datenbank in meine Darstellung ziehen". Dies zu kaskadieren ist einfach; Dies bedeutet, dass alle zugeordneten Entitäten aktualisiert werden.

MERGE bedeutet etwas Komplexes, das sich "Speichern" annähert, aber eher "diese getrennte Entität in den verwalteten Status zurückversetzen und ihre Statusänderungen speichern" ähnelt. Die Kaskadierung bedeutet, dass alle zugeordneten Entitäten auf dieselbe Weise zurückgeschoben werden und dem Handle für .merge()verwaltete Entitäten, von dem Sie zurückkommen, alle verwalteten Entitäten zugeordnet sind.

Link zu einer Instanz der relevanten Dokumente

Chaos
quelle
Was ist die Standardeinstellung (wenn wir keinen CascadeType festgelegt haben) und welche ist am sinnvollsten / am häufigsten festzulegen?
Rosdi Kasim
@Rosdi Kasim: Der Standardwert ist CascadeTypeein leeres Array.
user1438038
@chaos so refresh aktualisiert die untergeordneten Elemente so, dass sie mit dem Inhalt der Datenbank übereinstimmen, wenn das übergeordnete Element aktualisiert / aktualisiert wird. Beim Zusammenführen werden aktualisierte Felder in den untergeordneten Elementen in der Datenbank im Wesentlichen überschrieben, um die untergeordneten Entitäten mit dem übergeordneten Element widerzuspiegeln. Was passiert also, wenn beide verwendet werden? Ich kann mir vorstellen, dass ich das falsch verstanden habe.
Jordan Mackie
87

JPA-Annotation Bedeutung für viele zu viele Beziehungen :

  • ALL - Alle möglichen Kaskadierungsvorgänge, die an der Quellentität ausgeführt werden, werden an das Ziel der Zuordnung kaskadiert.
  • MERGE - Wenn die Quellentität zusammengeführt wird, wird die Zusammenführung zum Ziel der Zuordnung kaskadiert.
  • PERSIST - Wenn die Quellentität beibehalten wird, wird die Persistenz an das Ziel der Zuordnung kaskadiert.
  • REFRESH - Wenn die Quellentität aktualisiert wird, wird die Aktualisierung an das Ziel der Zuordnung kaskadiert.
  • ENTFERNEN - Wenn die Quellentität entfernt wird, wird auch das Ziel der Zuordnung entfernt.

Ich selbst sehe sie so (besser lesbar):

  • MERGE - für vorhandene Objekte, um die vorhandenen Daten in der Tabelle mit den Daten in meinem Objekt zusammenzuführen. (mit Datenbank synchronisieren)
  • PERSIST - erstellt neue Datensätze aus dem Objekt in der Datenbank.
  • REFRESH - dient zum Aktualisieren der Daten im Objekt. Möglicherweise gab es eine Änderung in der Datenbank, die synchronisiert werden muss. (Synchronisierung von Datenbank)
  • ENTFERNEN - wird gelöscht.
cgp
quelle
1
Der Javadoc für die Anmerkungen hat nichts für mich geklärt. Danke für die Antwort!
André Chalella