您的位置:首页 > 职场人生

码农小汪-Hibernate学习10-hibernate继承映射 @DiscriminatorColumn DiscriminatorType @Inheritance InheritanceType

2016-04-04 22:31 567 查看
一共有三种方式,处理继承映射。必须考虑到数据的冗余度。

全部放在一张表

父亲的放在一张表,儿子只是保存和父亲不一样的,增加的属性。

父亲保存父亲的,儿子保存儿子的。自己管理自己的

一共就上面上种讲的通俗易懂,简单好理解

一种中的来吧

Signal——table

全部放在一个表中使用一个列来区分父子。discriminator n.辨别者,鉴别器;

为了使用鉴别器,我们专门设立了一个列。@DiscriminatorColumn,里面的属性呢有个name 和普通过的@Cloumn一样的性质,还有一个是!discriminatorType ,这个属性说明我们用什么来区分父子的属性

DiscriminatorType.CHAR

DiscriminatorType.INTEGER

DiscriminatorType.STRING

一看就懂了~~

除了这个之外呢还有个

@DiscriminatorValue 来修饰每个类

person下面有Customer 和 employee

@Entity
// 定义辨别者列的列名为person_type,列类型为字符串
@DiscriminatorColumn(name="person_type" ,
discriminatorType=DiscriminatorType.STRING)
// 指定Person实体对应的记录在辨别者列的值为"普通人"
@DiscriminatorValue("普通人")
@Table(name="person_inf")
public class Person


// 顾客类继承了Person类
@Entity
// 指定Customer实体对应的记录在辨别者列的值为"顾客"
@DiscriminatorValue("顾客")
@Table(name="customer_inf")
public class Customer extends Person


// 员工类继承了Person类
@Entity
// 指定Employee实体对应的记录在辨别者列的值为"员工"
@DiscriminatorValue("员工")
@Table(name="employee_inf")
public class Employee extends Person


全部都是放在一张表里面去啦,这样子啦啦啦~~

连接子类映射策略

就是刚刚上面讲的第二种,比较的通俗易懂

这种 策略不是Hibernate默认的继承策略必须定制这种

@Inheritance

InheritanceType.SINGLE_TABLE

InheritanceType.JOINED第二个

InheritanceType.TABLE_PERCLASS 每一个子类

这种策略无需使用辨别者,只要继承树的根实体类上面有这个属性就ok啦

搞定

@Entity
// 指定使用连接子类的映射策略
@Inheritance(strategy=InheritanceType.JOINED)
@Table(name="person_inf")
public class Person


第三种和第二种一样的~没事好说的。每个子类都有一张完整的表,包含自己和父亲的所有属性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: