-->
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: Problem: Mehrere Objekt kopieren und an eine Referenz binden
PostPosted: Wed Oct 25, 2006 7:12 am 
Newbie

Joined: Wed Oct 25, 2006 6:53 am
Posts: 2
Hallo, bin noch Anfänger, was Hibernate (3.0) mit Spring betrifft.

Folgende Ausgangssituation:

Die Objekte, die in der DB abgelegt sind, entsprechen einer Baumstruktur.
D.h. ich habe ein Parent-Node, und der kann 1...n Child Nodes haben.
Die einzelnen Objekte enthalten Collections.

Was ich machen will:
Eine exakte Kopie eines ausgewählten Nodes, als neues Objekt in der DB anlegen.
Soweit auch kein Problem. Wenn ich Child Nodes kopiere, oder Parent-Node mit einem einzigen Child Node funktioniert das auch alles wunderbar.

Bei der Kopie eines Parent-Nodes iteriere ich über die Child-Nodes und muss von denen dann auch eine Kopie erzeugen und sie an den ParentNode hängen. Hierzu übergebe ich der Methode die Kopie des bereits angelegten parentNode
Code:
copyChildNode(ParentNode pNode,ChildNode childNodeForCopy)


Problem:
Wenn ein Parent-Node nun mehrere ChildNodes besitzt, kopiert Hibernate den ersten Child Node noch korrekt, dann aber bekomme ich folgende Exception:

Code:
Caused by: org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions
   at org.hibernate.collection.AbstractPersistentCollection.setCurrentSession(AbstractPersistentCollection.java:237)
   at org.hibernate.event.def.OnUpdateVisitor.processCollection(OnUpdateVisitor.java:41)
   at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:104)
   at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:64)
   at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:58)
   at org.hibernate.event.def.AbstractVisitor.process(AbstractVisitor.java:129)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:267)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:214)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:91)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)
   at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:468)
   at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:463)
   at org.springframework.orm.hibernate3.HibernateTemplate$18.doInHibernate(HibernateTemplate.java:615)
   at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:312)
   ... 70 more



Das Problem ist mir in soweit klar, dass Hibernate nicht in zwei Sessions mit einer Referenz auf ein Objekt arbeiten kann. Aber ich kann ja nicht dauern Kopien anlegen...
Hab schon probiert die Session zwischendurch zu schließen, aber dann crashed das ganze gewaltig.


Top
 Profile  
 
 Post subject:
PostPosted: Thu Oct 26, 2006 11:07 am 
Senior
Senior

Joined: Fri May 14, 2004 9:37 am
Posts: 122
Location: Cologne, Germany
Ein session.evict(Object) könnte vielleicht helfen. So wird dann das Objekt von der Session getrennt. Steht aber glaube ich auch so in der Doku. RTFM kann manchmal nützlich sein. =)

_________________
regards

Olaf

vote if it helped


Top
 Profile  
 
 Post subject:
PostPosted: Tue Oct 31, 2006 4:18 am 
Newbie

Joined: Wed Oct 25, 2006 6:53 am
Posts: 2
Das habe ich schon versucht, aber leider funktioniert das nicht.

Das Problem denke ich liegt daran, dass ich zunächst das Parent-Node Objekt kopiere,neu in die Datenbank schreibe anschließend das Child Objekt kopiere und dann zum Schluss das ParentObjekt ändere indem ich ihm das Child Objekt hinzufüge. Genau da hakt es denke ich, weil alles in einer Schleife durchläuft.

Wenn ich das bisher (in der Doku und in anderen Forenbeiträgen) richtig gelesen habe, wird bei Hibernate eine Collection nicht wie ein Objekt eindeutig durch eine ID zugeordnet und dadurch bekommt Hibernate Probleme.

Habe auch schon versucht das saveOrUpdate durch ein merge zu ersetzten, aber dann bekomme ich die Meldung

"row was updated or deleted by another transaction"


Top
 Profile  
 
 Post subject:
PostPosted: Tue Oct 31, 2006 7:17 am 
Senior
Senior

Joined: Fri May 14, 2004 9:37 am
Posts: 122
Location: Cologne, Germany
Also dann frage ich mich allerdings warum zwei Sessions auftauchen, Du solltest mit nur einen einzigen Session den Loop durchlaufen können. Es wäre in dieser Situation hilfreich, wenn Du mal etwas mehr Code posten könntest, da eigentlich auch das session.evict(Object) gehen sollte.

_________________
regards

Olaf

vote if it helped


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.