Hibernate中的继承映射



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

  1. 每簇类使用一个表;
  2. 每个子类一个表;
  3. 每个具体内一个表(有限制)。
假设我们有四个类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 >







非飞 2005-03-02 22:31




















你可能感兴趣的:(Hibernate,xml)