-->
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.  [ 4 posts ] 
Author Message
 Post subject: Duplizierte Tupel nach erneuten saveOrUpdate()
PostPosted: Wed Mar 21, 2007 11:06 am 
Newbie

Joined: Wed Mar 21, 2007 10:36 am
Posts: 2
Hallo zusammen,

ich bin neu bei Hibernate gelandet und habe eine, in meinen Augen, ganz blöde Frage.

Ich verwende eine Client-Server Anwendung, die mittel http kommunizieren.
Hierbei müsse für die Übertragung alle Objekte serialisiert werden.

Wenn nun der Client ein neues Objekt anlegt wird die hibernateID auf 0 gesetzt (nicht null). Danach serialisiert und zum Server geschickt.
Der Server ruft dann saveOrUpdate() auf um das erhaltene Objekt zu speichern.
Funktioniert alles prima...

Wenn jetzt der Client das erzeugte Objekt nochmal speichert, wird ein weiteres Tupel auf der Datenbank angelegt!
Der Server hat hierbei das vom Inhalt gleiche Objekt erhalten, allerdings ist die hibernateID (PK) immer noch auf 0.

Nun meine Frage, ich hab gelesen dass Hibernate anhand der Werte entscheidet ob ein Objekt neu ist, einzige Ausnahme sind hierbei die Collections.
Oder trifft das nur zu wenn der PK nicht auf 0 (== unsaved) steht.

Wäre es ratsam nach dem Speichern das Objekt als return value zum Client zu übertragen?
Er hätte somit die von Hibernate erzeugten ID's dabei. ??

Vielen Vielen dank für alle Hilfen
Hoschi


Top
 Profile  
 
 Post subject:
PostPosted: Thu Mar 22, 2007 1:24 pm 
Regular
Regular

Joined: Fri May 12, 2006 4:05 am
Posts: 106
Hallo,

hibernate entscheidet allein aufgrund des key-Wertes, ob das Objekt "neu" oder "alt" sein soll - zumindest bei automatisch generierten keys, bei "assigned" klappt das natürlich nicht.
Anhand der anderen WErte wird höchstens überprüft, ob das Objekt verändert wurde und daher ein update auf der Datenbank erfolgen muss.
Fazit: soll ein Objekt auf der Datenbank geändert werden muss beim "wiedereinhängen" des Objekts in die Session (z.B. via saveOrUpdate) auch die id gefüllt sein - sonst bringt hibernate nicht mehr zusammen was zusammengehört!

Gruß

piet


Top
 Profile  
 
 Post subject:
PostPosted: Fri Mar 23, 2007 8:24 am 
Newbie

Joined: Wed Mar 21, 2007 10:36 am
Posts: 2
Hallo piet,

erstmal vielen Dank für deine Antwort!
Ich hab mir schon fast so was gedacht, aber wenn man es noch von einem anderen hört ist man halt sicher.

Nun nur nochmal zum tieferen Verständnis.
Das bedeutet, das jedes Objekt, also alle im Objektbaum, die HibernateID behalten müssen!
Es reicht nicht wenn nur das Root Objekts eine HibernateID behält.

Gruß
Daniel


Top
 Profile  
 
 Post subject:
PostPosted: Fri Mar 23, 2007 10:41 am 
Regular
Regular

Joined: Fri May 12, 2006 4:05 am
Posts: 106
Genau (d.h. natürlich nur die Objekte, die auch eine id haben).
Gleiche id bedeutet für hibernate auch gleiches Objekt, unterscheidliche id bedeutet anderes Objekt, und das über die ganze Objekthierarchie. Um zu vermeiden, dass man jedesmal den gesamten Objektbaum zum Client schicken muss könnte man auch durch passende Einstellung der cascade-Optionen die resultierende Update-Kette irgendwo abbrechen lassen - allerdings müssten solche untergeordneten Objekte dann auch per Hand aktualisiert werden, aber da stösst mein kleines hibernate-Wissen auch schon langsam an seine Grenzen.

Gruß

piet


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