-->
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.  [ 6 posts ] 
Author Message
 Post subject: Einzelnes Objekt aus dem Cache löschen
PostPosted: Sat Jan 27, 2007 4:58 pm 
Newbie

Joined: Tue May 09, 2006 4:17 am
Posts: 8
Hallo miteinander,

ich habe ein Problem mit dem Hibernate-Cache.
Meine Waren-Wirtschafts-Anwendung nutzt für die Objekt-Persistenz Hibernate. Ein Anwender kann Rechnungen laden, öffnen und bearbeiten. Dies geschieht alles mit einer offenen Session, da sonst eine LazyLoadException eintritt.

Gut, man könnte dieses Problem durch eine verschachtelte Hibernate.initialize(..) Aufrufkette beheben, aber ich finde den Grundgedanken von LazyLoading recht gut.

Wenn nun ein Anwender ein Objekt verändert und es nicht speichern möchte, ist ja trotzdem das Objekt im Cache verändert worden. Beim nächsten Speichern eines anderen Objektes wird auch dieses nicht-zu-speichern-gewollte Objekt mitgespeichert.

Gibt es mit Hibernate die Möglichkeit für ein bestimmtes Objekt den Cache zu löschen ohne das all übergreifende session.clear() zu benutzen?

Oder benutze ich Hibernate vielleicht grundlegend falsch?

Gruß,
Thomas

Hibernate version: 3.1.3


Top
 Profile  
 
 Post subject: Objekt Änderung verwerfen...
PostPosted: Sun Jan 28, 2007 7:32 am 
Beginner
Beginner

Joined: Thu Nov 23, 2006 5:09 am
Posts: 21
Hibernate hin oder her, rein architektonisch würde ich eh ein ganz anderes Modell benutzen...

Der Anwender sollte über die GUI nicht direkt das persistierte Objekt verändern, sondern lediglich ein Bean oder ein anderes Transferobjekt.

Entkoppele Frontend und Backend!

Erst wen explizit 'Speichern' angeordnet wird (Durch User Input oder systematische Zwänge) werden die Änderungen in das persistierte Objekt übertragen. Ansonsten wird das Transferobjekt beim verlassen des GUI Elements oderAbbruch der Funktion einfach verworfen.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jan 28, 2007 8:25 am 
Newbie

Joined: Tue May 09, 2006 4:17 am
Posts: 8
mhm,
daran hab ich auch schon gedacht. das Blöde ist nur, dass ich dieses relativ komplizierte Objekt samt Klassenvererbung und all seinen Assoziationen selbst klonen muss. Sollte sich die Struktur meiner Persistenzobjekte ändern, so muss auch der Klonmechanismus angepasst werden. Eigentlich hätte Hibernate an der Stelle etwas durchdachter sein können.


Top
 Profile  
 
 Post subject: Hibernate - nicht durchdacht?!
PostPosted: Sun Jan 28, 2007 10:26 am 
Beginner
Beginner

Joined: Thu Nov 23, 2006 5:09 am
Posts: 21
So 100% bin ich auch noch nicht überzeugt von Hb.

Kämpfe seit einiger Weile mit komplexeren Queries welche sich scheinbar mit der API nicht abbilden lassen(oder deren Aufbau dann so komplex ist, dass ich's nicht verstehe), so dass man doch wieder bei HQL landet und Statements tippen muß...
... genau dass was ich vermeiden möchte, wenn ich ein Framework für den Datenzugriff benutze.

Aber was das Transferobjekt angeht:
Wenn Du Dich beim Design an bestimmte Regeln hälst nimmt Dir das Java Bean ne ganze Menge Arbeit ab und wird auch in IDEs unterstützt... musst also nicht alles von Hand coden.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jan 28, 2007 3:09 pm 
Newbie

Joined: Tue May 09, 2006 4:17 am
Posts: 8
Also ich hab jetzt mein Objekt zu samt Beziehungen geklont. Die Id des persitenten Objektes hab ich natürlich auch übernommen. Wenn ich jetzt aber ein Save aufrufe gibt es ne Exception:

"a different object with the same identifier value was already associated with the session"

Code:
..

LargeObject a = new LargeObject();

session.save(a);

session.close();

...

LargeObject b = makeADeepCopy(a);

b.setId( a.getId() );

changeObject(b);

session.save(b);

//     ----> Exception



Wie kann ich dar jetzt anders vorgehen? Ich will ja schließlich Objekt a durch b ersetzen. Wichtig ist dabei, dass auch Einträge aus der Collection übernommen werden. Insbesondere wenn der Anwender Einträge entfernt hat....


Top
 Profile  
 
 Post subject: Mögliches Problem im deepCopy
PostPosted: Tue Jan 30, 2007 8:44 am 
Newbie

Joined: Mon Dec 11, 2006 3:33 am
Posts: 6
Hallo, ich hatte ein ähnliches Problem beim "Kopieren" eines Objektes.
Ich vermute das du keine neue Instanz deines Objektes erzeugt hast.
Mit Eclipse im Debug-Modus kannst du dir die Ids (nicht die die Hibernate verwendet sondern eher die der VM) der Objekt ansehen. sind diese gleich verweisen beide Referenzen auf das selbe Objekt im Speicher. Dieses Problem konnte ich lösen nachdem ich wirklich ein neues Objekt erzeugt habe und von diesen die Properties kopiert habe und über die Listen Iteriert bin und diese ebenfalls kopiert habe. Für diesen Aufwand sollte dir aber BeanUtils.copyProperties helfen können.

lg DreamArtist


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 6 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.