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

本文介绍Hibernate中实现多表继承的两种方式:使用<union-subclass>和单独的<class>定义。前者要求所有实体共享相同的字段名,而后者允许不同字段名但会增加配置重复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

<class table="userinfo" name="cm.hxex.exam.model.User">
    
<id name="id" column="ID">
      
<generator class="uuid.hex"/>
    
</id>
    
<property name="name" column="NAME"/>
    
<property name="password" column="PASSWORD"/>
    
<property name="fullname" column="FULLNAME"/>
    
<union-subclass table="teacher" name="cn.hxex.exam.mode.Teacher">
        
<many-to-one column="class_id" cascade="save-update" name="classes"/>
    
</union-subclass>

     
<union-subclass table="student" name="cn.hxex.exam.mode.Student">
       
<set cascade="all" lazy="true" table="TEACHER_CLASS" name="classes">
         
<key column="TEACHER_ID"/>
         
<many-to-many class="cn.hxex.exam.model.Classes" column="CLASS_ID"/>
       
</set>
     
</union-subclass>
</class>

 (2)使用单独的<class>

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

 <class table="USERINFO" name="cn.hxex.exam.model.User">
    
<id name="id" column="ID">
      
<generator class="uuid.hex"/>
    
</id>
    
<property name="name" column="NAME"/>
    
<property name="password" column="PASSWORD"/>
    
<property name="fullname" column="FULLNAME"/>
  
</class>

    
<class table="STUDENT" name="cn.hxex.exam.model.Student">
    
<id name="id" column="ID">
      
<generator class="uuid.hex"/>
    
</id>
    
<many-to-one column="CLASS_ID" cascade="save-update" name="classes"/>
    
<property name="name" column="NAME"/>
    
<property name="password" column="PASSWORD"/>
    
<property name="fullname" column="FULLNAME"/>
  
</class>

    
<class table="TEACHER" name="cn.hxex.exam.model.Teacher">
    
<id name="id" column="ID">
      
<generator class="uuid.hex"/>
    
</id>
    
<set inverse="true" name="papers">
      
<key column="TEACHER_ID"/>
      
<one-to-many class="cn.hxex.exam.model.TestPaper"/>
    
</set>
    
<set cascade="all" lazy="true" table="TEACHER_CLASS" name="classes">
      
<key column="TEACHER_ID"/>
      
<many-to-many class="cn.hxex.exam.model.Classes" column="CLASS_ID"/>
    
</set>
    
<property name="name" column="NAME"/>
    
<property name="password" column="PASSWORD"/>
    
<property name="fullname" column="FULLNAME"/>
  
</class>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值