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>