-->
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: Unique bei (Persistent)set umgehen
PostPosted: Wed Jun 06, 2007 3:47 pm 
Newbie

Joined: Wed Jun 06, 2007 3:19 pm
Posts: 2
situation:
ich habe ein geladenes objekt OBJ das ein PersistentSet PS als member enthält.

ziel:
ich möchte neue objekte dem PS hinzufügen, diese neuen objekte sind bis auf das identifing-field vollständig initialisiert (das identifing-field 'primarykey' wird von hibernate über eine sequenz vergeben)
die neuen objekte haben für das identifing-field einen default wert gesetzt.

mein vorgehen:
- ich erstelle ein HashSet, füge diesem die neuen objekte hinzu.
- danach setze ich das OBJ.PS auf HashSet

problem:
da die neuen objekte (die ich dem set hinzufügen möchte) einen default-identifier haben, der in allen neuen objekten gleich ist, wird dem Hash- bzw. PersistentSet nur das erste neue objekt hinzugefügt.
über ...saveOrUpdate(OBJ) wird dann auch nur ein eintag in die datenbank vorgenommen. es wurde ja nur ein objekt dem set hinzugefügt (das speichern und eintragen in die datenbanktabelle funktioniert einwandfrei)

frage:
wie kann ich einem set ein weiteres objekt mit gleichem identifier hinzufügen?

anmerkung:
ich denke, dass iterieren über eine ArrayList und jedes objekt einzeln speichern zwar eine lösung wäre.. aber sicher nicht die eleganteste hier anzuwendende.. oder doch?


danke, Merkur256


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jun 07, 2007 5:12 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
Quote:
frage:
wie kann ich einem set ein weiteres objekt mit gleichem identifier hinzufügen?


Das geht schon mal gar nicht, da dies auch der definierten Funktionsweise eines Sets widersprechen würde. Bei einem Set handelt es sich um eine Menge (wie im mathematischen Sinne). Diese dürfen ja keine doppelten Werte enthalten.

Da ich vor einem ähnlichen Problem stand, habe ich in meinen ersten Versuchen den neuen Objekten eine temporäre ID mitgeben. Diese ID ist ein eigenständiges Attribut, welches nichts mit der Datenbank zu tun hat und somit auch nicht im Mapping zu finden ist. Die equals()-Methode wurde soweit umgebogen, dass sie zum Vergleich dieses Attribut verwendet, sollte die eigentliche ID nicht gesetzt ist.
Ein anderer Weg ist zu überlegen welche Kobination der restlichen Attribute Deines Objektes auch eindeutig wären und damit entsprechend die equals()-Methode erweitern falls die ID nicht gesetzt ist. Hier kannst Du Dir aber mit der Eindeutigkeit nie so sicher sein wie bei der DB-ID!!

Die Liste ist ein Weg den ich auch ein paarmal verfolgt habe. Hier musst Du aber darauf achten (wenn die Liste nicht gemappt ist sondern nur zu Bearbeitungszwecken dient), dass Du Dein gemapptes Set und die Liste manuell synchron halten musst! Am Ende bleibt dir aber hier dann auch nichts anderes übrig bleibt als die Liste zu iterieren (ich denke aber auch, dass es sich je nach Datenmodell manchmal nicht vermeiden lässt).

_________________
Weise ist nicht, wer viele Erfahrungen macht, sondern wer aus wenigen lernt, viele nicht machen zu müssen. (Karlheinz Deschner)


Last edited by FPC on Thu Jun 14, 2007 3:56 am, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Wed Jun 13, 2007 10:46 am 
Newbie

Joined: Wed Jun 06, 2007 3:19 pm
Posts: 2
zuerst bitte ich für die verspätete antwort um entschuldigung.

FPC wrote:
Die equals()-Methode wurde soweit umgebogen, dass die zum Vergleich dieses Attribut verwendet, wenn die eigentliche ID nicht gesetzt ist.


wir haben es jetzt so implementiert und siehe da.. es funktioniert wunderbar.

danke für diesen tipp


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.