Hallo,
ich möchte eine Struktur mit Knoten erzeugen, welche * Vorgänger als auch * Nachfolger haben kann.
Das Mapping wir mit xdoclet erstellt und ich habe hier einen Ausschnitt aus der Klasse RightsNode:
Code:
/**
* Returns the children
*
* @hibernate.set
* table="parent_child_nodes"
* lazy="true"
* @hibernate.collection-key
* column="parent_id"
* @hibernate.collection-many-to-many
* class="com.indatex.data.rightsmanagement.RightsNode"
* column="child_id"
*/
public List getChildren() {
return this.childNodes;
}
public void setChildren(List childNodes) {...}
/**
* Returns the parents
*
* @hibernate.set
* table="parent_child_nodes"
* inverse="true"
* lazy="true"
* @hibernate.collection-key
* column="child_id"
* @hibernate.collection-many-to-many
* class="com.indatex.data.rightsmanagement.RightsNode"
* column="parent_id"
*/
public List getParents() {
return this.parentNodes;
}
Daraus entsteht folgendes Mapping in der hbm.xml Datei
Code:
<set
name="children"
table="parent_child_nodes"
lazy="false"
cascade="all"
sort="unsorted"
>
<key
column="parent_id"
>
</key>
<many-to-many
class="com.indatex.data.rightsmanagement.RightsNode"
column="child_id"
outer-join="auto"
/>
</set>
<set
name="parents"
table="parent_child_nodes"
lazy="false"
inverse="true"
cascade="all"
sort="unsorted"
>
<key
column="child_id"
>
</key>
<many-to-many
class="com.indatex.data.rightsmanagement.RightsNode"
column="parent_id"
outer-join="auto"
/>
</set>
Wenn ich nun aus meiner Anwendung einen Knoten hole und dieser erstmal keine Nachfolger und auch keine Vorgänger hat, dann tritt die folgende Exception auf:
Code:
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.indatex.data.rightsmanagement.RightsNode#0]
org.hibernate.ObjectNotFoundException.throwIfNull(ObjectNotFoundException.java:27)
org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:118)
org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:75)
org.hibernate.impl.SessionImpl.immediateLoad(SessionImpl.java:643)
org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:59)
org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:84)
org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:134)
com.indatex.data.rightsmanagement.RightsNode$$EnhancerByCGLIB$$9f629015.getChildrenFirstLevel(<generated>)
com.indatex.struts.actions.AdminAction.execute(AdminAction.java:40)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
....
Ich hätte an der Stelle eigentlich erwartet, daß getChildren null zurückliefert. Denn in der Datenbank habe ich nunmal nur einen einzigen Knoten drin und in der Mappingtabelle ist kein Eintrag vorhanden.
Danke für eure Hilfe,
Andi