Heim >Java >javaLernprogramm >## Wann sollte ich „persist()' vs. „merge()' in JPA und Hibernate verwenden?

## Wann sollte ich „persist()' vs. „merge()' in JPA und Hibernate verwenden?

Susan Sarandon
Susan SarandonOriginal
2024-10-26 12:38:03769Durchsuche

## When Should I Use `persist()` vs. `merge()` in JPA and Hibernate?

Den Unterschied zwischen Persist() und Merge() in JPA und Hibernate verstehen

In JPA und Hibernate sind persist() und merge ()-Methoden spielen eine entscheidende Rolle bei der Verwaltung von Entitäten und der Handhabung der Datenpersistenz. Sie weisen jedoch deutliche Unterschiede in ihrem Verhalten auf.

Persist()

Die Methode persist(), wie in der JPA-Spezifikation definiert, funktioniert wie folgt:

  • Wenn die Entität neu und nicht verwaltet ist, wird sie verwaltet und in der Datenbank gespeichert, wenn die Transaktion festgeschrieben oder gelöscht wird.
  • Wenn die Entität bereits verwaltet oder entfernt wird, wird die Der Vorgang wird ignoriert.
  • Wenn die Entität getrennt wird, kann eine Ausnahme ausgelöst werden oder der Persistenzvorgang kann während der Flush- oder Commit-Zeit fehlschlagen.
  • Die Kaskadenvorgänge werden auf alle referenzierten Entitäten mit angewendet cascade=PERSIST oder cascade=ALL Anmerkungen.

Merge()

Andererseits hat die merge()-Methode eine andere Semantik:

  • Wenn die Entität getrennt wird, wird ihr Status auf eine bereits vorhandene verwaltete Entität mit derselben Identität kopiert oder es wird eine neue verwaltete Kopie erstellt.
  • Wenn die Entität neu ist , eine neue verwaltete Entität wird erstellt und ihr Status wird von der eingehenden Entität kopiert.
  • Wenn die Entität entfernt wird, wird eine Ausnahme ausgelöst.
  • Wenn die Entität verwaltet wird, wird der Vorgang ignoriert , aber Kaskadenoperationen werden weiterhin auf referenzierte Entitäten angewendet, wenn sie mit cascade=MERGE oder cascade=ALL annotiert sind.
  • Die zusammengeführte Entität referenziert die verwalteten Entitäten für alle Beziehungen, die mit cascade=MERGE oder cascade=ALL annotiert sind.
  • Wenn eine Entität mit einem Verweis auf eine nicht kaskadierte Beziehung zusammengeführt wird, gibt die Zuordnung der zusammengeführten Entität einen Verweis auf ein verwaltetes Objekt mit derselben Identität zurück.

Wann So verwenden Sie Persist() oder Merge()

Basierend auf diesen Unterschieden können Ihnen die folgenden Richtlinien bei der Auswahl der geeigneten Methode helfen:

  • Verwenden Sie persist(), wann immer Sie möchten um eine neue Entität zu erstellen oder eine vorhandene Entität zu aktualisieren, die noch nicht vom Persistenzkontext verwaltet wird.
  • Verwenden Sie merge(), wenn Sie eine vorhandene Entität aktualisieren möchten, die bereits verwaltet wird, aber außerhalb des Persistenzkontexts geändert wurde .

Das obige ist der detaillierte Inhalt von## Wann sollte ich „persist()' vs. „merge()' in JPA und Hibernate verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn