首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

经验10-hibernate 高级映射之继承映射

2012-12-30 
心得10-hibernate 高级映射之继承映射1.对象模型(Java类结构)2.一个类继承体系一张表(subclass)(表结构)一

心得10-hibernate 高级映射之继承映射

1.对象模型(Java类结构)

经验10-hibernate 高级映射之继承映射

2.一个类继承体系一张表(subclass)(表结构)

经验10-hibernate 高级映射之继承映射

一个类继承体系一张表(subclass)(映射文件)

<class name="Employee" table="employee" discriminator-value="0">

      <id name="id">

        <generator class="native"/>

      </id>

<!—鉴别器,用来标识雇员具体是哪个类型;需要注意的是鉴别器的位置是固定,不能乱放,只能放置在id后其他属性前-->

      <discriminator column="type" type="int"/>

      <property name="name"/>

      <subclass name="Skiller" discriminator-value="1">

       <property name=”skill”/>

     </subclass>

     <subclass name="Sales" discriminator-value="2">

       <property name="sell"/>

      </subclass>

</class>

3. 每个子类一张表(joined-subclass) (表结构)

 经验10-hibernate 高级映射之继承映射


每个子类一张表(joined-subclass) (映射文件)

<class name="Employee" table="employee">

      <id name="id">

        <generator class="native"/>

      </id>

      <property name="name"/>

<joined-subclass name="Skiller" table="skiller">

       <key column="employee_id"/>

       <property name="skill"/>

</joined-subclass>

<joined-subclass name="Sales" table="sales">

  <key column="employee_id"/>

  <property name="sell"/>

</joined-subclass>

</class>

4.混合使用“一个类继承体系一张表”和“每个子类一张表” (表结构)

经验10-hibernate 高级映射之继承映射

混合使用“一个类继承体系一张表”和“每个子类一张表” (映射文件)

<class name="Employee" table="employee">

      <id name="id">

        <generator class="native"/>

      </id>

      <discriminator column="type"/>

      <property name="name"/>

      <subclass name="Skiller">

       <property name="net"/>

     </subclass>

     <subclass name=”Sales”>

       <join table="sales">

          <key column="employee_id"/>

          <property name="sell"/>

       </join>

     </subclass>

</class>

5.每个具体类一张表(union-subclass) (表结构)

经验10-hibernate 高级映射之继承映射

每个具体类一张表(union-subclass) (映射文件)

<class name="Employee" abstract="true">

      <id name="id">

        <generator class="hilo"/>

      </id>

      <property name="name"/>

      <union-subclass name="Skiller" table="skiller">

       <property name="skill"/>

     </union-subclass>

     <union-subclass name="Sales" table="sales">

       <property name="sell"/>

     </union-subclass>     

   </class>

主健不能是identity类型,如果父类是abstract=”true”就不会有表与之对应。

隐式多态,映射文件没有联系,限制比较多很少使用。

 


6. 以上情况的优缺点

继承关系:

1).整个继承关系一张表:子类的属性比较少的情况。要使用多态查询时。优点:只有一张表,查找快,查询效率高些;运用多态理念,符合java核心技术。缺点:如果增加子类表结构会被修改,操作麻烦;如果子类特别多,不同子类的不同字段也特别多,那么这张表里会出现很多空值null。

2).每个子类一张表:子类的属性较多时优点:数据库中不存在无用的字段,即不存在空值。

3).每个具体类一张表:当父类是抽象类。不需要多态查询时。缺点:查找的时候先合并所有表然后在查找,比较慢,效率低。

 

 

热点排行