09-05
26

Hibernate中的继承映射

Hibernate的继承映射包含了三种不同的策略:


每簇类使用一个表;
每个子类一个表;
每个具体内一个表(有限制)。

假设我们有四个类Animal,Dog,Cat,其代码如下:
文件名:Animal.java
class Animal {
    private String identifier;
    private String name;
    private String category;
    // setter and getter
}
文件名:Dog.java
class Dog extends Animal {
    private String
    // setter and getter
}
文件名:Cat.java
class Cat extends Animal {
    private String
    // setter and getter
}


每簇类使用一个表
       使用每簇类使用一个表的策略时,有一个限制就时子类不能有NOT NULL,映射文件为:
       文件名:Animal.hbm.xml
      
<class name="Animal" table="TB_ANIMAL">
          <id name="identifier" type="string" column="IDENTIFIER">
             <generator class="uuid.hex"/>
          </id>
          <discriminator column="ANIMAL_TYPE" type="string"/>
          <property name="name" column="NAME" type="string"/>
          
          <subclass name="Dog" discriminator-value="DOG">
            
          </subclass>
          <subclass name="Cat" discriminator-value="CAT">
            
          </subclass>
       </class>


每个子类一个表
       使用每个子类一个表的策略时,可以使用一个映射文件实现,也可以分成多个映射文件来实现。每个子类一个映射文件的情况:
       文件名:Animal.hbm.xml
      
<class name="Animal" table="ANIMAL">
          <id name="identifier" column="IDENTIFIER" type="string">
             <generator class="uuid.hex"/>
          </id>
          <property >
       </class>

       文件名:Dog.hbm.xml
      
<joined-subclass name="Dog" table="DOG" extends="Animal">
          <key column="DOG_ID"/>
          
       </joined-subclass>


       文件名:Cat.hbm.xml

      
<joined-subclass name="Cat" table="CAT" extends="Cat">
          <key column="CAT_ID"/>
          
       </joined-subclass>

       每个子类一个表的策略实际上一种one-to-one的映射。

每个具体内一个表(有限制)
       使用每个具体内一个表(有限制)策略时,每一个子类的映射文件将要包含所有父类中的属性,映射文件:
       文件名:Dog.hbm.xml
      
<class name="Dog" table="DOG">
          <id name="identifier" column="IDENTIFIER" type="string">
             <generator class="uuid.hex"/>
          </id>
          <property name="name" column="NAME" type="string"/>
          
       </class>



       文件名:Cat.hbm.xml
  
     <class name="Cat" table="CAT">
          <id name="identifier" column="IDENTIFIER" type="string">
             <generator class="uuid.hex"/>
          </id>
          <property name="name" column="NAME" type="string"/>
          
       </class>


文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: 继承 映射
相关日志:
评论: 0 | 引用: 0 | 查看次数: 494
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭