March 25th, 2006
Hibernate-Erkenntnis: Niemals inverse=true bei bidirektionaler IndexedList
Beim Verwenden einer bidirektionalen one-to-many Beziehung in Hibernate darf offensichtlich inverse=”true” nicht verwendet werden, wenn die Liste automatisch über ein Indexfeld sortiert werden soll.
Folgends Mapping mal angenommen:
<class name="Parent" table="PARENT">
<id name="id" column="ID">
<generator class="increment"/>
</id>
<property name="name" column="NAME"/>
<list name="childList" lazy="true" cascade="all"
inverse="false">
<key>
<column name="PARENT_ID"/>
</key>
<list-index column="POS" />
<one-to-many
class="de.form4.bollweg.catalog.entities.DoublePage"/>
</list>
</class>
<class name="Child" table="CHILD">
<id name="id" column="ID">
<generator class="increment"/>
</id>
<property name="position" column="POSITION" />
<many-to-one name="parent" column="PARENT_ID"
class="Parent" inverse="true"/>
</class>
In diesem Fall wird das Feld POSITION nicht aktualisiert, die Folge ist dass man zwei Childobjekte in der Collection mit dem Index 0 hat (womit Hibernate leider überhaupt nicht umgehen kann).
So jedoch gehts:
...
<class name="Child" table="CHILD">
...
<many-to-one name="parent" column="PARENT_ID" class="Parent"
inverse=”false”/>
</class>
Also ich weis ja nicht, ob das alles so richtig is ?!?


One Response to “Hibernate-Erkenntnis: Niemals inverse=true bei bidirektionaler IndexedList”
[...] Man fügt der Collection nun ein neues Child an beliebiger Stelle hinzu: parent.getChilden.add(newChild,2); newChild.setParent(parent); // ist nötig bei bidirektionaler Verknüpfung, siehe hier [...]
March 26th, 2006 at 10:44
Leave a Reply