0
parent_id
の値を持つテーブルがあります。XMLを使ってHibernateのサブクラスを使ってクラスを自己にマッピングする
+----+------------+---------+-----------+------+---------+-----------+
| id | title | user_id | published | uri | type_id | parent_id |
+----+------------+---------+-----------+------+---------+-----------+
| 1 | file1.bpmn | 1 | 0 | NULL | 1 | 5 |
| 2 | file2.bpmn | 1 | 0 | NULL | 1 | 5 |
| 3 | file3.bpmn | 1 | 0 | NULL | 1 | 5 |
| 4 | file4.bpmn | 2 | 0 | NULL | 1 | 6 |
| 5 | root | 1 | 0 | NULL | 2 | NULL |
| 6 | root | 2 | 0 | NULL | 2 | NULL |
| 7 | root | 3 | 0 | NULL | 2 | NULL |
| 8 | SomeFolder | 1 | 0 | NULL | 2 | 5 |
+----+------------+---------+-----------+------+---------+-----------+
私はこのようにそれらをマップしようとすると:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping">
<hibernate-mapping>
<class name="com.naples.file.Pobject" table="pobjects" catalog="pleak" discriminator-value="-1">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<discriminator column="type_id" type="java.lang.Integer"/>
<many-to-one name="user" class="com.naples.user.User" fetch="select">
<column name="user_id" not-null="true" />
</many-to-one>
<many-to-one name="directory" class="com.naples.file.Directory" fetch="select">
<column name="parent_id"/>
</many-to-one>
<property name="title" type="string">
<column name="title" length="255" not-null="true" />
</property>
<set name="permissions" table="permissions" inverse="true" lazy="false" fetch="select" cascade="all">
<key>
<column name="pobject_id" not-null="true"/>
</key>
<one-to-many class="com.naples.file.Permission"/>
</set>
<subclass name="com.naples.file.File" extends="Pobject" discriminator-value="1">
<property name="published" type="boolean">
<column name="published" length="255" not-null="true" />
</property>
<property name="uri" type="string">
<column name="uri" length="255" />
</property>
</subclass>
<subclass name="com.naples.file.Directory" extends="Pobject" discriminator-value="2">
<set name="pobjects" table="pobjects" inverse="false" lazy="false" fetch="select">
<key>
<column name="parent_id" not-null="true"/>
</key>
<one-to-many class="com.naples.file.Pobject"/>
</set>
</subclass>
<filter name="userFilter" condition="user_id = :userFilterParam"/>
</class>
<filter-def name="userFilter">
<filter-param name="userFilterParam" type="java.lang.Integer"/>
</filter-def>
</hibernate-mapping>
私はエラーを取得していないが、Directory
オブジェクトの属性pobjects
は空です。しかし、この場合には、私のルートオブジェクトの一つは、このようなものでなければなりません:
id = 5
title = "root"
user = UserObjectWithID1
directory = null
permissions = [PermissionObject1, PermissionObject2, ...]
pobjects = [FileObjectWithID1, FileObjectWithID2, FileObjectWithID3, FolderObjectWithID8]
しかし、それは実際には次のとおりです。
id = 5
title = "root"
user = UserObjectWithID1
directory = null
permissions = [PermissionObject1, PermissionObject2, ...]
pobjects = []
だから、XMLの注釈ファイル内のサブクラスマッピング部と、おそらく何か問題があります。私が達成しようとしていることはまったく可能ですか?