2013-07-04 47 views
3

歧視假如我有實體模型下面的情況和使用Hibernate 3.6:休眠如何連接子類

Person 
    |__ Student 
      |__ SchoolBoy 
      |__ CollegeStudent 

我在我的數據庫中的表是tpersontstudent。由於我使用Hibernate映射文件,我將它聲明如下到我一個人的實體定義:

<joined-subclass name="Student" table="tstudent"> 
    <key column="id_person" /> 
</joined-subclass> 

被男生類似CollegeStudent,我想用同桌的兩個(tstudent),它具有學生類型鑑別器列,而我保持這兩個類。我的問題是,一旦你進入一個聯合子類,Hibernate似乎不允許鑑別器列。

有沒有解決方法?

UPDATE

這就是我現在所擁有的:

<class name="Person"> 
    <id name="Id" column="id" type="integer"> 
     <generator class="increment" /> 
    </id> 
    <joined-subclass name="Student" table="tstudent"> 
     <key column="id_person" /> 
     <joined-subclass name="SchoolBoy" table="tschoolboy"> 
      <key column="id_person" /> 
     </joined-subclass> 
     <joined-subclass name="CollegeStudent" table="tcollegestudent"> 
      <key column="id_person" /> 
     </joined-subclass> 
    </joined-subclass> 
</class> 

這就是我想在映射連接的一部分內容:

<joined-subclass name="Student" table="tstudent"> 
    <key column="id_person" /> 
    <discriminator column="student_type" /> 
    <subclass name="SchoolBoy" discriminator-value="SCHOOL_BOY" /> 
    <subclass name="CollegeStudent" discriminator-value="COLLEGE_STUDENT" /> 
</joined-subclass> 
+0

請分享完全映射 – WeMakeSoftware

+0

我稍後會跟進,當我有時間去看看但我通過在人與學生之間交換繼承來解決這個問題 - 在這種情況下,學生只是一個人的角色。 – mabi

+0

更新了我的映射文件的更多細節。 @mabi如果你有解決方案,如果你發佈了一些基於我的代碼的例子,我將不勝感激。 –

回答

6

Hibernate文檔說:

休眠不支持混合<subclass>,<joined-subclass><union-subclass>映射在同一個根<class>元素下。這是可能的相同<class>元素混合在一起,每個層級和每個子類策略表的表,通過結合<subclass><join>元素

在你的情況,你將需要鑑別列移動到tperson表並使用連接元素爲您的學生類添加額外的屬性。

<class name="Person" table="tperson" discriminator-value="PERSON"> 
    <id name="Id" column="id" type="integer"> 
     <generator class="increment" /> 
    </id> 
    <discriminator column="person_type" /> 
    <subclass name="Student" discriminator-value="STUDENT"> 
     <key column="id_person" /> 
     <subclass name="SchoolBoy" discriminator-value="SCHOOL_BOY"> 
      <join table="tstudent"> 
       <key column="id_person" /> 
       ... 
      </join> 
     </subclass> 
     <subclass name="CollegeStudent" discriminator-value="COLLEGE_STUDENT"> 
      <join table="tstudent"> 
       <key column="id_person" /> 
       ... 
      </join> 
     </subclass> 
    </subclass> 
</class> 

您還可以添加可能在通用於所有學生的屬性學生子元素的加入

+0

我知道混合類繼承類型是不可能的,但是,並沒有注意到在不同級別混合區分值的機會。這絕對值得獎勵。 –

+0

我將不勝感激,如果你看看[主題相關的問題](http://stackoverflow.com/questions/17542729/hibernate-subclasses-many-to-many-using-the-same-pivot-table )我正在處理。 –