hibernate对象关系实现(四)继承实现

时间:2024-01-09 08:27:32

继承实现方式分为三种:subclass; joined-subclass;union-subclass

a.类中体现

hibernate对象关系实现(四)继承实现 hibernate对象关系实现(四)继承实现

b.库中体现分为三种:

b.1:一种方式:人和学生公用一张表,添加一个辨别字段,学生数据特有的字段不能设置非空约束,因为人对象是没有这个数据的

hibernate对象关系实现(四)继承实现

b.2第二种方式:共有数据放一张表中,特有的数据放另外一张表中;外键关联:外键做主键;

hibernate对象关系实现(四)继承实现

b.3第三种方式:每个对象有各自表存放各自的数据;

hibernate对象关系实现(四)继承实现

c.不同方式的配置也不同:

c.1一种方式只有一个表的情况:只需要配置人对象映射配置:

hibernate对象关系实现(四)继承实现

hibernate对象关系实现(四)继承实现

不同对象插入设置了一个默认辨别值,

c.2第二方式的配置:子类对应的表进行主键关联;

hibernate对象关系实现(四)继承实现

c.3第三种方式配置:注意的是主键的生成策略,两个表的主键是连续的

hibernate对象关系实现(四)继承实现

hibernate对象关系实现(四)继承实现

d.测试

d.1一种方式进行

hibernate对象关系实现(四)继承实现

保存:执行两条插入语句,并且为辨别列自动设对应的值,对于school特有的值,person所对应那列值为null;

查询:

hibernate对象关系实现(四)继承实现

hibernate对象关系实现(四)继承实现

查询子类和父类都只从一张表中,一条查询语句,以type来判断类型;

缺点:需要添加辨别列

子类特有列不能加非空约束

如果继承新加的列比较多,那么父类的数据冗余很多null值;

d.2,对应第二方式:

保存:

特别之处是保存子类型时,会执行两条插入语句,因为数据是存放在两个表中;

查询:

采用多态查询父类时,采用左外连接的方式联合查询;

查询子类时,采用内连接联合查询;

缺点:保存和查询比第一种方式差

优点:不需要辨别列

特有数据列可设置为非空

没有冗余字段;

d.3第三种方式:

保存:执行两条插入语句;

获取:获取子类直接获取;

获取父类:利用子查询先查询person和student采用union组合起来再得到整个父类;需要查询两个表;因为子表父表数据都属于父类;

缺点:存在冗余的字段;

更新:

hibernate对象关系实现(四)继承实现

更新父类的效率较低:因为要更新父表和子表的数据;