Wann sollte ich save () für eine Instanz eines Domänenobjekts in Grails aufrufen?

8

Nach dem, was ich gelesen habe, informiert save() den Persistenzkontext, dass eine Instanz gespeichert oder aktualisiert werden soll. Ich habe jedoch Methoden in einem Dienst, die die Eigenschaft einer Domäneninstanz ändern, ohne save() aufzurufen, und die Änderung erscheint sofort in meiner Datenbank, kein Problem.

Ist die save() -Methode nur eine sicherere Möglichkeit zu wissen, dass eine Domäneninstanz nach einer Änderung aktualisiert wird (und Fehler mit der failOnError-Zuordnung abfängt)? Sollte es JEDES Mal verwendet werden, wenn ich die Eigenschaften einer Domäneninstanz ändere oder übertreibe ich das?

    
Weezle 28.02.2012, 22:00
quelle

1 Antwort

8

Wenn Sie eine neue Instanz einer Domänenklasse erstellen, teilt ein .save() -Aufruf der zugrunde liegenden Hibernate-Schicht mit, dass das neue Objekt in der Datenbank beibehalten wird. Ohne .save() wird es nicht in der Datenbank gespeichert.

Wenn Sie ein Objekt über ein .get(myId) abrufen, werden alle Änderungen am Ende der zugrunde liegenden Transaktion automatisch in der Datenbank gespeichert, da Hibernate das Objekt als "dreckig" ansieht. Das Ende einer Transaktion steht am Ende eines Methodenaufrufs an einen Transaktionsdienst oder am Ende einer Anfrage für Controller. Sie können .save() aufrufen, wenn Sie in diesen Fällen möchten, aber es ist nicht notwendig. Es bietet einfachen Zugriff auf die Spülung von Hibernate über .save(flush:true) oder die failOnError Verwendung für die Validierung.

    
schmolly159 28.02.2012, 22:35
quelle

Tags und Links