两种针对继承的HBM文件编写方法

时间:2021-01-01 19:26:40

首先,有三个实体对象User,Student, Teacher

其中三者共同的属性是name,password,fullname,均定义在User中,Student和Teacher继承User

如果要在hibernate配置文件中定义上面的关系,有两种方法

(1)使用<union-subclass>
          使用这种方式,三个表的字段名称必须完全相同(name,password,fullname)

两种针对继承的HBM文件编写方法<class table="userinfo" name="cm.hxex.exam.model.User">
两种针对继承的HBM文件编写方法    
<id name="id" column="ID">
两种针对继承的HBM文件编写方法      
<generator class="uuid.hex"/>
两种针对继承的HBM文件编写方法    
</id>
两种针对继承的HBM文件编写方法    
<property name="name" column="NAME"/>
两种针对继承的HBM文件编写方法    
<property name="password" column="PASSWORD"/>
两种针对继承的HBM文件编写方法    
<property name="fullname" column="FULLNAME"/>
两种针对继承的HBM文件编写方法    
<union-subclass table="teacher" name="cn.hxex.exam.mode.Teacher">
两种针对继承的HBM文件编写方法        
<many-to-one column="class_id" cascade="save-update" name="classes"/>
两种针对继承的HBM文件编写方法    
</union-subclass>
两种针对继承的HBM文件编写方法
两种针对继承的HBM文件编写方法     
<union-subclass table="student" name="cn.hxex.exam.mode.Student">
两种针对继承的HBM文件编写方法       
<set cascade="all" lazy="true" table="TEACHER_CLASS" name="classes">
两种针对继承的HBM文件编写方法         
<key column="TEACHER_ID"/>
两种针对继承的HBM文件编写方法         
<many-to-many class="cn.hxex.exam.model.Classes" column="CLASS_ID"/>
两种针对继承的HBM文件编写方法       
</set>
两种针对继承的HBM文件编写方法     
</union-subclass>
两种针对继承的HBM文件编写方法
</class>

 (2)使用单独的<class>

           可以解决字段名不一样的问题,但在每个子类中都要进行相应的属性定义,造成配置重复

两种针对继承的HBM文件编写方法 <class table="USERINFO" name="cn.hxex.exam.model.User">
两种针对继承的HBM文件编写方法    
<id name="id" column="ID">
两种针对继承的HBM文件编写方法      
<generator class="uuid.hex"/>
两种针对继承的HBM文件编写方法    
</id>
两种针对继承的HBM文件编写方法    
<property name="name" column="NAME"/>
两种针对继承的HBM文件编写方法    
<property name="password" column="PASSWORD"/>
两种针对继承的HBM文件编写方法    
<property name="fullname" column="FULLNAME"/>
两种针对继承的HBM文件编写方法  
</class>
两种针对继承的HBM文件编写方法
两种针对继承的HBM文件编写方法    
<class table="STUDENT" name="cn.hxex.exam.model.Student">
两种针对继承的HBM文件编写方法    
<id name="id" column="ID">
两种针对继承的HBM文件编写方法      
<generator class="uuid.hex"/>
两种针对继承的HBM文件编写方法    
</id>
两种针对继承的HBM文件编写方法    
<many-to-one column="CLASS_ID" cascade="save-update" name="classes"/>
两种针对继承的HBM文件编写方法    
<property name="name" column="NAME"/>
两种针对继承的HBM文件编写方法    
<property name="password" column="PASSWORD"/>
两种针对继承的HBM文件编写方法    
<property name="fullname" column="FULLNAME"/>
两种针对继承的HBM文件编写方法  
</class>
两种针对继承的HBM文件编写方法
两种针对继承的HBM文件编写方法    
<class table="TEACHER" name="cn.hxex.exam.model.Teacher">
两种针对继承的HBM文件编写方法    
<id name="id" column="ID">
两种针对继承的HBM文件编写方法      
<generator class="uuid.hex"/>
两种针对继承的HBM文件编写方法    
</id>
两种针对继承的HBM文件编写方法    
<set inverse="true" name="papers">
两种针对继承的HBM文件编写方法      
<key column="TEACHER_ID"/>
两种针对继承的HBM文件编写方法      
<one-to-many class="cn.hxex.exam.model.TestPaper"/>
两种针对继承的HBM文件编写方法    
</set>
两种针对继承的HBM文件编写方法    
<set cascade="all" lazy="true" table="TEACHER_CLASS" name="classes">
两种针对继承的HBM文件编写方法      
<key column="TEACHER_ID"/>
两种针对继承的HBM文件编写方法      
<many-to-many class="cn.hxex.exam.model.Classes" column="CLASS_ID"/>
两种针对继承的HBM文件编写方法    
</set>
两种针对继承的HBM文件编写方法    
<property name="name" column="NAME"/>
两种针对继承的HBM文件编写方法    
<property name="password" column="PASSWORD"/>
两种针对继承的HBM文件编写方法    
<property name="fullname" column="FULLNAME"/>
两种针对继承的HBM文件编写方法  
</class>