2012-03-07 30 views
0

我有一个表(学生)的列stu_id,stu_name,favourite_subject,subject_id需要一个Hibernate的ORM映射想法

favourite_subject会像数学的预定值,英语等 如果值是数学,subject_id将有表格:maths_subject的ID。

含义,根据favourite_subject值,subject_id将指向相应主题的ID。

我该如何在Hibernate ORM框架中实现。

<hibernate-mapping package="com.sample.project"> 
     <class name="StudentDTO" table="student"> 
      <meta attribute="class-description">class to hold student data</meta> 
      <id name="id" type="long" column="stu_id"> 
       <generator class="increment"/> 
      </id> 
      <discriminator column="favourite_subject" type="string"/> 
      <property name="studentName" column="stu_name" not-null="true"/> 

      <!--?? here i don't know how to proceed. ??--> 
      <subclass name="??????" discriminator-value="Maths"> 
       ???? 
      </subclass> 
     </class> 
    </hibernate-mapping> 

所有科目都会有自己的表&自己对应的实体类。

+0

接合子类或亚类的哪一个适合在这里吗? – krishna 2012-03-08 06:13:35

回答

0

假设下面的类结构

class Student 
{ 
    private Subject favoriteSubject; 
} 

class MathSubject : Subject 
{ 
} 
class EnglishSubject : Subject 
{ 
} 

相应的映射

<hibernate-mapping package="com.sample.project"> 
    <class name="Student" table="student"> 
     <meta attribute="class-description">class to hold student data</meta> 
     <id name="id" type="long" column="stu_id"> 
      <generator class="increment"/> 
     </id> 
     <property name="studentName" column="stu_name" not-null="true"/> 

     <any name="subject" id-type="Integer" meta-type="String" cascade="all"> 
      <meta-value value="math" class="MathSubject"/> 
      <meta-value value="english" class="EnglishSubject"/> 
      <column name="favourite_subject"/> 
      <column name="subject_id"/> 
     </any> 
    </class> 
</hibernate-mapping>