リストインデックスは、オブジェクトが親の子リストのどこにあるかを調べることによって導出されるため、直接更新することはできません。オブジェクトがリストのインデックス10にあり、list-index
プロパティが5に設定されている場合、Hibernateはどちらを使用する必要がありますか?
したがって、通常、リストインデックスを格納するために使用する列をHibernateに指示し、その後はそれを忘れます。
ただし、list-index
プロパティに直接アクセスするために(などの読み取り専用の方法でgetIndexInList()
)プロパティをオブジェクトにマップする場合は、を使用してプロパティをマップする必要がありますinsert=false update=false
。
私はXMLマッピングに少し錆びていますが、これは私がうまくいくと信じているものに近いものです。問題がある場合と、どのようなエラーメッセージが表示されるかをお知らせください。
<hibernate-mapping>
<class name="com.example.Node" table="node">
<id name="id" column="nodeId">
<generator class="native"/>
</id>
<property
name="listIndex"
column="listIndex"
insert="false"
update="false" />
<many-to-one
name="parent"
column="parentNodeId"
class="com.example.Node"/>
<list name="children" inverse="true" cascade="all">
<key column="parentNodeId"/>
<list-index column="listIndex"/>
<one-to-many class="com.example.Node"/>
</list>
</class>
</hibernate-mapping>