首页 > Web开发 > 详细

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

时间:2016-01-23 21:20:22      阅读:166      评论:0      收藏:0      [点我收藏+]

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

a.类中体现 

 技术分享 技术分享

b.库中体现分为三种:

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

技术分享

 

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

技术分享

 

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

技术分享

 

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

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

技术分享

技术分享

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

 

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

技术分享

 

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

技术分享

技术分享

 

d.测试

d.1一种方式进行

技术分享

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

查询:

技术分享

技术分享

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

缺点:需要添加辨别列

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

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

 

d.2,对应第二方式:

   保存:

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

   查询:

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

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

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

   优点:不需要辨别列

            特有数据列可设置为非空

            没有冗余字段;

 

d.3第三种方式:

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

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

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

缺点:存在冗余的字段;

更新:

技术分享

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

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

原文:http://www.cnblogs.com/straybirds/p/5153882.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!