hibernate映射 【映射继承关系】,初学例子六

Hibernate处理继承,如公司与员工存在一对多关系,对应的继承关系如图所思:

hibernate处理:

 

(1)继承关系树的每一个具体类对应一个表,所以有三个表,一个公司表,一个小时员工表,一个薪水员工表

公司表对应的配置文件:

<hibernate-mapping package="bean">
 <class name="bean.Company" table="t_company">
  <cache usage="read-only"/>
  <id name="id" column="id" type="long">
   <generator class="native"/>
  </id>
  <property name="name" column="name"></property>
    
 </class>
</hibernate-mapping>

 

小时员工对应的配置文件:

<hibernate-mapping package="bean">
 <class name="bean.HouryEmplyee" table="t_houryEmplyee">
  <cache usage="read-only"/>
  <id name="id" column="id" type="long">
   <generator class="native"/>
  </id>
  <property name="name" column="name"></property>
  <property name="rat" column="rat"></property>
  
  <many-to-one name="companys" cascade="save-update" class="bean.Company"/>
    
 </class>
</hibernate-mapping>

薪水员工对应的配置文件   同   小时员工对应的配置文件

 

(2)继承树的根元素对应一个表,就是一个公司表,一个员工表,里面包含了,小时,和,薪水字段,还有一个,比较用来区分两个的类别字段

 

公司的配置文件:

<hibernate-mapping package="bean">
 <class name="bean.Company" table="t_company">
  <cache usage="read-only"/>
  <id name="id" column="id" type="long">
   <generator class="native"/>
  </id>
  <property name="name" column="name"></property>
  <set name="emplyees" inverse="true">
   <key column="emplyee_id"/>
   <one-to-many class="bean.Emplyee"/>
  </set>
 </class>
</hibernate-mapping>

 

跟类员工表,配置文件,

<hibernate-mapping package="bean">
 <class name="bean.Emplyee" table="t_Emplyee">
  <cache usage="read-only"/>
  <id name="id" column="id" type="long">
   <generator class="native"/>
  </id>
  <property name="name" column="name"></property>
  <many-to-one name="companys" cascade="save-update" class="bean.Company"/>
    
  <discriminator column="type"></discriminator>
  <subclass discriminator-value="HE" name="bean.HouryEmply">
   <property name="hour" column="hour"></property>
  </subclass>
  <subclass discriminator-value="SE" name="bean.SalaryEmply">
   <property name="rat" column="rat"></property>
  </subclass>
 </class>
</hibernate-mapping>

注意:这里,用来discriminator  来设置,对于不同的类别,来区分的标志,<subclass>里,包含各自拥有的属性

 

 

对于他们的查找,可以,from Emplyee    也可以  from HouryEmply 或者  from  SalaryEmpy

也就是,可以查找他们的子类,数据库中对应的字段type,存的值为discriminator-value 对应的值 HE  或者  SE

 

 

(3)继承关系树的每个类对应一个表 那么就有四个表,

公司的配置文件

<hibernate-mapping package="bean">
 <class name="bean.Company" table="t_company">
  <cache usage="read-only"/>
  <id name="id" column="id" type="long">
   <generator class="native"/>
  </id>
  <property name="name" column="name"></property>
  <set name="emplyees" inverse="true">
   <key column="emplyee_id"/>
   <one-to-many class="bean.Emplyee"/>
  </set>
 </class>
</hibernate-mapping>

 

员工对应的映射文件为:关键

 

<hibernate-mapping package="bean">
 <class name="bean.Emplyee" table="t_Emplyee">
  <cache usage="read-only"/>
  <id name="id" column="id" type="long">
   <generator class="native"/>
  </id>
  <property name="name" column="name"></property>
  <many-to-one name="companys" cascade="save-update" class="bean.Company"/>
    
  <joined-subclass name="bean.HouryEmpy" table="t_houry_emplyee">
   <key column="hour_emplyee_id"/>
   <property name="hour" column="hour"></property>
  </joined-subclass>
  
  <joined-subclass name="bean.SalaryEmpy" table="t_salary_emplyee">
   <key column="salary_emplyee_id"/>
   <property name="rat" column="rat"></property>
  </joined-subclass>

    
 </class>
</hibernate-mapping>

 

 

注意,这里与上面对应的subclass的配置,subclass没有单独对应的表,他的取值,是通过discriminator-value 制定的,

 

可以看下面代码不同点:

  <discriminator column="type"></discriminator>
  <subclass discriminator-value="HE" name="bean.HouryEmply">
   <property name="hour" column="hour"></property>
  </subclass>
  <subclass discriminator-value="SE" name="bean.SalaryEmply">
   <property name="rat" column="rat"></property>
  </subclass>

  
  
  <joined-subclass name="bean.HouryEmpy" table="t_houry_emplyee">
   <key column="hour_emplyee_id"/>
   <property name="hour" column="hour"></property>
  </joined-subclass>
  
  <joined-subclass name="bean.SalaryEmpy" table="t_salary_emplyee">
   <key column="salary_emplyee_id"/>
   <property name="rat" column="rat"></property>
  </joined-subclass>

 

注意:如果不在父类配置文件里配置,可以在单独个各自文件里配置属性

如:在小时员工表里配置: 一定要添加继承关系

<hibernate-mapping package="bean">

  <joined-subclass name="bean.HouryEmpy" table="t_houry_emplyee" extends="bean.Emplyee">
   <key column="hour_emplyee_id"/>
   <property name="hour" column="hour"></property>
  </joined-subclass>

</hibernate-mapping>

同样,该配置,可以查找Emplee,也可以查找他们的子类

 

 

 

 

 

 

 

 

注:文章,内容摘自《精通Hibernate:Java对象持久化技术详解》

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值