2016-07-07 17 views
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の注釈ファイル内のサブクラスマッピング部と、おそらく何か問題があります。私が達成しようとしていることはまったく可能ですか?

答えて

0

どうにかして動作します。この変更のためかもしれません(それぞれのクラスにディレクトリPobjectのタイプを作成するかもしれません)か、Javaの神々は単に今日は単に慈悲深いでしょう。

関連する問題