Hibernate深入学习(二):继承与多态查询-subclass

关于继承和多态查询,由于篇幅过长,将会放到两篇文章

目前有一个Person类,Worker继承自Person,并添加了2个属性,省略setter和getter
具体如下:

public class Person {
   
    private Integer id;
    private String name;
    private Integer age;

}
public class Worker extends Person{
   
    private String job;
    private String unit;
}

hibernate为我们提供了三种形式来表示继承关系,分别是:subclass,joined-subclass,union-subclass
我们可以先从生成的数据库表来直观的感受下三者的区别:
1.subclass
subclass
可以看到父类和子类存在同一张表中,其中的role字段是辨别者列,用于辨别这条记录是父类还是子类


2.join-subclass
不同于subclass,joined-subclass和union-subclass都是需要两种表来存储。首先看看joined-subclass生成的两张数据库表:
父类表:
父类表
子类表:
子类表

这种方式也很容易理解,就是父类表存储父类字段,子类表存储子类字段,虽然没有了辨别者列,但是额外增加了一个person_id来表示二者的关系,我们可以看一下子类表的外键
这里写图片描述


3.union-subclass
这种方式只要和joined-subclass比较一下就很清楚了,join-subclass是父类表存储父类字段,子类表存储子类字段,那么union-subclass就是父类表存储父类字段,而子类表既要存储父类字段,也要存储子类字段
父类表:
这里写图片描述
子类表:
这里写图片描述

下面通过实体映射文件和测试代码来详述这三种继承

1.subclass,注意看我加粗的地方(如果csdn无法显示加粗,请找到class和subclass的discriminator-value属性),由于父类表和子类表共存在一张表中,因此需要一个辨别者列,我们需要分别对父类和子类设置辨别者列的值,本例中使用PERSON和WORK

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值