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.