-->
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.  [ 1 post ] 
Author Message
 Post subject: [erledigt] Anfängerfrage wegen NonUniqueObjectException
PostPosted: Tue May 23, 2006 4:23 pm 
Newbie

Joined: Tue May 23, 2006 4:18 pm
Posts: 3
edit: arghhh ... war ein Fehler bei der Konfiguration der Transaktionen im Spring Framework.
Jetzt, da alles in einer Transaktion abläuft, klappt auch Session.merge() super !
Merke: immer nur ein Framework gleichzeitig lernen :)
Danke euch trotzdem fürs lesen !
Gruß, Gary
-----------------------------------------------------------------------------

Hallo !

Ich bin gerade dabei eine ganz einfache Anwendung auf Hibernate umzustellen um Hibernate zu lernen.

Soweit klappt das auch ganz gut - allerdings habe ich derzeit ein nur mit sehr hohem Aufwand zu beseitigendes Problem, welches ich so nicht einsehen kann :)

Folgende Objekt-Struktur liegt vor:

PARENT
CHILD
SUBCHILD

Jetzt möchte ich gerne NEUE Werte (die kommen von einer SOAP-Response) in die Datenbank schreiben und erstelle mit hierzu meinen Objekt-Baum aus der Response.

Ich gehe jetzt einfach mal davon aus, dass ALLE Werte neu sind und nicht erst gegen die Datenbank gecheckt werden müssen.

Das sieht dann irgendwie so aus. Die Nummer hinter dem _ ist der eindeutige Schlüssel des jeweiligen Objekts.

SESSION_OPEN

PARENT_1
CHILD_1
SUBCHILD_1
CHILD_2
SUBCHILD_2
CHILD_3
SUBCHILD_1

SAVE_ALLE_OBOVE

SESSION_CLOSE

Jetzt das eigentlich Problem: die 2. Erzeugung von SUBCHILD_1 ... das wirft mir beim speichern immer eine NonUniqueObjectException.

Den Grund dafür verstehe ich und kann den auch nachvollziehen. Allerdings habe ich einfach keine Ahnung, wie ich das vermeiden soll.

Mit Session.get() kann ich nicht nachschauen, ob es den Wert schon einmal gibt - er ist neu und noch nicht in der Datenbank enthalten.

Session.merge() findet es auch garnicht witzig einen Wert mergen zu wollen der noch nicht persistent ist.

Session.saveOrUpdate() / .save() wirft eh eine Exception.

Session.contains() prüft auf die gleiche Instanz, nicht auf den gleichen PK ... auch nicht brauchbar :(

Um diesen Fehler zu vermeiden könnte ich mir jetzt eine HashTable aufbauen in der ich anhand des Schlüssels SUBCHILD_1 finden würde und keine neue Instanz

erstellen würde ...

... aber die NonUniqueObjectException zeigt mir, dass Hibernate das ja schon macht :)

Nur wie komme ich da dran ?

Jedes einzelne Objekt direkt zu speichern und/oder gegen die Datenbank zu checken finde ich zu 'unperformant'.

Evtl. kann mir ja einer von euch auf die Sprünge helfen ?


1000 Dank !

Gruß,
Gary


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

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.