Hallo,
wichtig ist hier wohl, dass man die Funktionsweise von save() bzw. update() richtig versteht: die Methoden dienen nur dazu, ein Objekt mit dem Hibernate Persistenz-Kontext zu verbinden, wenn es das vorher noch nicht war. Mit den Datenbankzugriffen hat das noch nichts zu tun.
In deinem Fall braucht man das cat-Objekt nicht mehr explizit an den Persistenz-Kontext anhängen: die Verbindung besteht sowieso schon, da das Objekt ja via hibernate aus der Datenbank geladen wurde (falls das alles in der gleichen Session passiert). Falls nun irgendwelche Änderungen an cat vorgenommen werden wird es als "dirty" markiert und bei Aufruf von flush() werden alle Änderungen in die Datenbank geschrieben.
Beachte:
In der folgenden Code Sequenz:
Code:
session.save(dog);
session.clear();
würde das dog-Objekt unter Umständen nicht in der Datenbank gespeichert, da wie gesagt save() erst einmal nur dazu dient, das Objekt in Hibernate bekannt zu machen. Der eigentliche Speichervorgang wird (so weit das der id-Generator zulässt) auch bis zum flush() aufgeschoben.
Alles klar?
Gruß
piet