-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: Verhalten bei session.clear() und großen Datenmengen
PostPosted: Wed Jan 09, 2008 3:56 pm 
Newbie

Joined: Wed Jan 09, 2008 3:14 pm
Posts: 2
Hallo!

Ich habe eine kleine Verständnisfrage zur Funktion von Session.clear(), wobei ich aus der Dokumentation sowie der Doku zur API nicht schlau werde.

Soweit ich verstanden habe, werden beim Aufruf von session.clear() der Cache gelöscht und alle noch nicht in der tatsächlichen DB ausgeführten saves, updates usw. verworfen.

Wie verhält sich das aber in diesem konkreten Beispiel:

// ein Objekt aus der DB laden
Cat cat = retrieveOldestCat();

// neues Objekt anlegen und speichern
Dog dog = new Dog();
dog.setName("Hund");
dog.set...

// das neue Dog-Objekt speichern
session.save(dog);

session.flush();
session.clear();


Geht mit dem am Schluss durchgeführen clear() die anfängliche Änderung am Cat-Objekt verloren (das Cat-Objekt wurde ja nicht explizit gespeichert oder upgedatet), oder werden die Änderungen beim Aufruf von session.flush() schon in die Datenbank geschrieben, sodass session.clear() hier bedenkenlos ist?

Vielen Dank!

lakewood


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jan 11, 2008 9:09 am 
Regular
Regular

Joined: Fri May 12, 2006 4:05 am
Posts: 106
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


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jan 11, 2008 1:44 pm 
Newbie

Joined: Wed Jan 09, 2008 3:14 pm
Posts: 2
Vielen Dank!

Genau das wollte ich wissen ;-)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.