Hibernate继承映射

Hibernate继承映射

Hibernate作为ORM框架的一个具体实现,最大的一个优点就是使我们的开发更加的能体现出“面向对象”的思想。在面向对象开发中,类与类之间是可以相互继承的,而Hibernate中也对这种继承关系提供了自己风格的封装,这就是我们接下来要介绍的Hibernate继承映射的三种策略

类的关系

Person.java

public class Person implements Serializable {
    private Integer id;
    private String name;
    private Integer age;
    //省略getter,setter方法
}

Student.java

public class Student extends Person implements Serializable {
	private String study;
	//省略getter,setter方法
}

Teacher.java

public class Teacher extends Person implements Serializable {
    private Double salary;
    //省略getter,setter方法
}

每颗类继承树一张表

Person.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.hibernate.pojo">
    <class name="Person">
        <id name="id">
            <generator class="native"></generator>
        </id>
         <!-- 指明鉴别器 column表示数据库中对应的列名 -->
		<discriminator column="type" type="string"></discriminator>
        <property name="name"></property>
        <property name="age"></property>
      <subclass name="Student" discriminator-value="s">
        <property name="study"></property>
       </subclass>
       <subclass name="Teacher" discriminator-value="t">
        <property name="salary"></property>
       </subclass>
    </class>
</hibernate-mapping>

每个具体类(子类)一张表

Person.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.hibernate.pojo">
	<!-- abstract="true"表示不会生成对应的数据库表 -->
    <class name="Person" abstract="true">
        <id name="id">
        	<!-- 自定义主键 -->
            <generator class="assigned"></generator>
        </id>
        <property name="name"></property>
        <property name="age"></property>
      <union-subclass name="Student">
         <property name="study"></property>
      </union-subclass>
      <union-subclass name="Teacher">
         <property name="salary"></property>
      </union-subclass>
    </class>
</hibernate-mapping>

每个类一张表

Person.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.hibernate.pojo">
    <class name="Person">
        <id name="id">
            <generator class="native"></generator>
        </id>
        <property name="name"></property>
        <property name="age"></property>
      <joined-subclass name="Student">
          <!-- key表示外键 column表示数据库表中的列名 -->
          <key column="id"></key>
          <property name="study"></property>
      </joined-subclass>
       <joined-subclass name="Teacher">
            <!-- key表示外键 column表示数据库表中的列名 -->
            <key column="id"></key>
            <property name="salary"></property>
       </joined-subclass>
    </class>
</hibernate-mapping>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值