Was ist der Unterschied zwischen persist() und save() in den Ruhezustand?
Durch Dokumentation finde ich nur einen Unterschied, die save-Methode generiert, gibt das Objekt als generierte Kennung ist, aber weiter nicht.Ist es der einzige Zweck für die Bereitstellung der persist-Methode.Wenn ja, wie hilft es für den Programmierer, weil selbst wenn er nicht beabsichtigt, die Verwendung generierte Kennung ist, kann er verwenden, speichern und ignorieren Sie die return-Wert.
Kam auch durch diesen thread bei Was ist der Vorteil von persist() vs save() in den Ruhezustand?. Die sinnvolle Aussage, die ich bekommen kann, aus diesem thread ist persist() sichert Ihnen zu, dass es nicht eine INSERT-Anweisung auszuführen, wenn es heißt außerhalb der transaktionsgrenzen die save-Methode keine aber nicht sicher, wie sollte ich versuchen es in meinem Programm so, dass ich eigentlich den Unterschied?
InformationsquelleAutor M Sach | 2011-11-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich einige mock-Tests zum erfassen der Unterschied zwischen Save() und Persist().
Klingt wie diese beiden Methoden verhält sich genauso beim Umgang mit Transienten-Einheit, sondern unterscheiden sich beim Umgang mit Detached Entity.
Für das folgende Beispiel nehmen EmployeeVehicle als eine Einheit mit PK als vehicleId, das ist ein generierter Wert und vehicleName als eines Ihrer Immobilie .
Beispiel 1 : der Umgang mit Transienten Objekt
Ergebnis :
select nextval ('hibernate_sequence')
//Das ist für Fahrzeug-Id generiert : 36Beispiel 2 : der Umgang mit Detached-Objekt
Ergebnis : Sie könnte damit rechnen, dass das Fahrzeug mit der id : 36, erhalten in der vorherigen Sitzung aktualisiert wird, mit Namen wie "Toyota" . Aber was passiert, ist, dass eine neue Entität gespeichert wird in der DB eine neue Id generiert und der Name "Toyota"
//Session 2
//Hier in Sitzung 2 , Fahrzeug-Entität, die in der vorherigen Sitzung ist ein freistehendes Objekt, und jetzt werden wir versuchen, Sie zu retten /beibehalten, es
(i) Mittels persist() persist ein freistehendes Objekt
Ergebnis : Exception geworfen : detached entity passed to persist
So, es ist immer besser, zu Bestehen() anstatt Speichern() speichern muss sorgfältig verwendet werden, wenn der Umgang mit session und transcation .
Wie kann ein Unternehmen sein, in 2 Staaten (persistent & detached) in der gleichen Zeit?
InformationsquelleAutor Deivanayagam Senthil
Rückgabetyp: beide Funktionen EINFÜGEN der Datensätze in einer Datenbank, sondern Rückgabetyp der persist () - Methode ist void, während Rückgabetyp der save () - Methode ist, dass die Primärschlüssel-id-Wert, der erzeugt wird von hibernate.
Identifier : persist () - Methode nicht garantieren, dass der id-Wert zugewiesen werden, die persistente Instanz sofort, die Zuordnung könnte passieren flush Zeit.
Transaktionsgrenzen: Wir aufrufen können persist () - Methode innerhalb der Transaktion nur, so ist es sicher und kümmert sich um alle Objekte kaskadiert. save () - Methode aufrufen können, die innerhalb oder außerhalb einer Transaktion.
Kontext : persist () - Methode fügt das entity-Objekt in den persistenten Kontext und verfolgen keine weiteren änderungen. Alle weiteren änderungen werden gespeichert, die zum Zeitpunkt der Begehung der Transaktion, wie Sie bestehen.
schließlich persist () - Methode ist besser als sparen().
Beispiele
InformationsquelleAutor Premraj
Persist():
zugeordnet Persistenz Beispiel nach dem INSERT. die Zuordnung könnte
passieren flush Zeit.
Grenzen.
Save():
InformationsquelleAutor MAA
speichern() gibt eine Kennung, und wenn ein INSERT ausgeführt werden, um die Kennung, LEGEN Sie diese sofort geschieht, egal, ob Sie innerhalb oder außerhalb einer Transaktion. Das ist nicht gut in eine lange andauernde Gespräch mit einem erweiterten Sitzung/Persistenz-Kontext.
persist() wird auf transiente Objekte. Es macht eine transiente Instanz persistent. Es wird jedoch nicht garantieren, dass der id-Wert zugewiesen werden, die persistente Instanz sofort die Zuordnung passieren könnte beim flush.Es gewährleistet auch, dass es nicht eine INSERT-Anweisung auszuführen, wenn es heißt außerhalb der transaktionsgrenzen. Dies ist nützlich bei lang Laufenden Gespräche mit einem erweiterten Sitzung/Persistenz-Kontext.
save
nicht aktualisiert wenn der Datensatz vorhanden ist, müssen Sie rufensafeOrUpdate
.save
würde eine Ausnahme in diesem Fall.Deine Antwort ist sehr verwirrend und falsch in einigen teilen. Ihre Antwort klingt wie save() ist nicht verwendet, die auf transiente Objekte, wenn Sie erwähnen, persist() wird verwendet, auf transiente Objekte. Auch, speichern() wird ein update() ist falsch.
InformationsquelleAutor bilash.saha
Unterschied zwischen Speichern und speichern , Speichern, ausführen, außerhalb der Transaktion. Führen Sie den obigen code, und überprüfen Sie die Konsole System.aus.println(Sitzung 1.save(person)) zurück, mit id und führen Sie es wieder, es erhöht Ihre Kennung. Nun, wenn Sie versuchen, Speichern Sie einen anderen Datensatz in der Person-Tabelle in der Datenbank mit dem folgenden code, und aktualisieren Sie die Datenbank-Tabelle und überprüfen Sie die id-Spalte in der Datenbank. Sein Wert wird inkrementiert.
Wenn wir versuchen, die Persistenz der Daten außerhalb Transaktions-Grenze, die es geben Ausnahme.
InformationsquelleAutor Deepak
Save () - Methode tun insert-Anweisung, die normalerweise außerhalb der Transaktion
und die persist () - Methode kann das nicht.
Und ein mehr Unterschied zwischen speichern und speichern-Methode im Ruhezustand: beibehalten wird unterstützt durch JPA, beim speichern wird nur unterstützt von Hibernate.
Vom tutorial Unterschied zwischen speichern und speichern-Methode im Ruhezustand
InformationsquelleAutor David Pham