[Hibernate笔记] 继承映射

[Hibernate笔记] 继承映射

对于对象的继承关系, 建议“每一棵类继承树对应一个表”,即对每一个子类都进行使用<subclass>声明。 例如:

有一个基类: class User, 两个子类: class Admin和 class Guest.

则新建一个表格来对应这个继承类数:

create   table   USER  ( 
    ID 
char ( 32 not   null
    DISCRIMINATOR_USERTYPE 
varchar ( 255 not   null
    NAME 
varchar ( 16 not   null
    PASSWORD 
varchar ( 16 not   null
    USER_LEVEL 
integer
    POWER_OTHER 
varchar ( 255 ), 
    GUEST_OTHER 
varchar ( 255 ), 
    
primary   key  (ID) 
);

其中字段DISCRIMINATOR_USERTYPE来记录储存的类别是属于UserAdmin或是Guest的记录,如果该字段是ParentUser,则表示该笔数据是User类别,如果是ADMIN,表示是Admin的记录,如果是GUEST,表示是Guest的记录.


映像文件:

<? xml version="1.0" ?>  
<! DOCTYPE hibernate-mapping 
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
>  

< hibernate-mapping >  

    
< class  name ="com.zj.User"  table ="USER"  discriminator-value ="ParentUser" >  

        
< id  name ="id"  type ="string"  unsaved-value ="null" >  
            
< column  name ="ID"  sql-type ="char(32)" />  
            
< generator  class ="uuid.hex" />  
        
</ id >  

        
< discriminator  column ="DISCRIMINATOR_USERTYPE"  type ="string" />  

        
< property  name ="name"  type ="string"  not-null ="true" >  
            
< column  name ="NAME"  length ="16"  not-null ="true" />  
        
</ property >  

        
< property  name ="password"  type ="string"  not-null ="true" >  
            
< column  name ="PASSWORD"  length ="16"  not-null ="true" />  
        
</ property >  

        
< subclass  name ="com.zj.Admin"  discriminator-value ="ADMIN" >  
            
< property  name ="level"  type ="integer"  column ="ADMIN_LEVEL" />  

            
< property  name ="otherOfPower"  type ="string"  column ="POWER_OTHER" />  
         
</ subclass >  
        
         
< subclass  name ="com.zj.Guest"  discriminator-value ="GUEST" >  
            
< property  name ="otherOfGuest"  type ="string"  column ="GUEST_OTHER" />  
         
</ subclass >  
    
</ class >  

</ hibernate-mapping >


注意上面文件中,在映像子类别时,使用 <subclass> 指明映像的子类别以及其 discriminator-value来指定.

你可能感兴趣的:([Hibernate笔记] 继承映射)