2010-12-16 4 views
7

Was sind die Unterschiede zwischen HibernateSession Methoden saveOrUpdate(Object) und merge(Object)? Es scheint, dass beide Methoden eine SQLINSERT-Anweisung generieren, wenn das angegebene Objekt in der entsprechenden Tabelle nicht existiert, und eine UPDATE, wenn sie existiert.Was sind die Unterschiede zwischen den Hibernate-Session-Methoden saveOrUpdate() und merge()?

+1

Haben Sie tatsächlich die Java-Dokumente gelesen, die Sie verlinkt haben? :) – willcodejavaforfood

+0

Ja, habe ich. Der Hauptunterschied, den ich sehe, ist, dass 'merge()' ein Objekt lädt, das nicht in der Sitzung ist, während 'saveOrUpdate()' dies nicht tut. Bedeutet dies, dass 'saveOrUpdate()' eines Teilobjekts alle Felder überschreibt, während 'merge()' nur die Felder überschreibt, die auf Nicht-Null-Werte gesetzt wurden? Oder produzieren beide das gleiche Ergebnis? –

+0

mögliches Duplikat von [NHibernate - Unterschied zwischen session.Merge und session.SaveOrUpdate?] (Http://stackoverflow.com/questions/170962/nhibernate-difference-between-session-merge-and-session-saveorupdate) –

Antwort

1

Auch wenn dies für NHibernate ist, es gilt auch für Hibernate:

NHibernate - Difference between session.Merge and session.SaveOrUpdate?

+0

Laut Der dritte Kommentar, NHibernate 'Merge()' und 'SaveOrUpdate()' erzeugen genau das gleiche Ergebnis. (Der Kommentator gibt an, dass 'SaveOrUpdate()' einfach an 'Merge()' delegiert wird.) –

+1

Ok, wenn das stimmt, dann ist es nicht das gleiche für Hibernate :-) Beide Aufrufe * können * dasselbe Ergebnis erzeugen, hängen aber davon ab über den Zustand der Entität. Anstatt die Dokumentation zu replizieren, stelle ich nur den aktualisierten Link zur Verfügung :-) http://docs.jboss.org/hibernate/core/3.5/reference/en/html/objectstate.html#objectstate-saveorupdate – jpkrohling

1

Wenn ich mich richtig erinnere, fusionieren ist für un-assoziierte Instanzen, die derzeit nicht verwaltet werden. Es wird eine Suche basierend auf ID durchgeführt und die beiden zusammengeführt.

+0

Was ist das? bedeuten, "die zwei" Objekte zu verschmelzen? Woher weiß es, welche Felder zusammengeführt werden sollen? Verschmelzt es nur diejenigen, die sich nicht unterscheiden oder die sich unterscheiden und nicht null sind? Der erste Fall unterscheidet sich nicht von einem Update, während sich der zweite von Speichern und Aktualisieren unterscheidet. –

+0

Sehen Sie sich die zweite Antwort zu der verknüpften Frage an, in der die Spezifikation angegeben ist. 3.2.4.1 - http://stackoverflow.com/questions/3870844/best-approach-for-updation-using-jpa Es sieht so aus, als ob die abgelöste Instanz die meisten Daten überschreibt, es sei denn, ein Feld wird als träge markiert oder die Klasse unterstützt Versionen. – Scott

Verwandte Themen