继承实现方式分为三种: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对象关系实现(四)继承实现的更多相关文章

  1. hibernate对象关系实现(一)一对多

    hibernate是对jdk一个封装工具,实现对象和数据库之间数据映射.使用时涉及到四个问题:a.对象之间的关系在类中的体现:b,对象关系对应的数据库中表之间体现:c.实现a,b在hibernate的 ...

  2. Hibernate 对象关系映射文件

    简介: POJO 类和关系型数据库之间的映射可以用一个 XML 文档来定义 通过 POJO 类的数据库映射文件,Hibernate 可以理解持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据 ...

  3. hibernate对象关系实现(三)多对多实现

    单向n-n:(catogory-item)一个类别对应多个条目,一个条目对应多个类别 a.以类别类中有条目的集合的引用为例: b.数据库中的体现:建立一个新表,以类别和条目的主键关联的外键做新表的联合 ...

  4. hibernate对象关系实现(二)一对一

    双向一对一以部门和经理为例: a.部门和经理类中各自由对方的引用:(省略了get/set方法) b.数据库两种方式实现:一种(b.1)是外键映射,并将外键添加唯一约束(至于哪个对象的主键做外键,可随意 ...

  5. hibernate对象关系映射( 一对一,一对多,多对一,多对多的单向,双向映射 ——)

    对象之间的关系: 关系映射之间的关系只的是对象之间的关系,并不指数据库表的关系(外键关系)这儿解决的问题是当对象之间的关系之一时,数据库表该如何映射,编程上如何对待. 一对一(主键关联,和单向的外键关 ...

  6. hibernate对象关系映射的配置

    一对一主键关联单双向 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-m ...

  7. Hibernate -- 对象关系映射基础

  8. hibernate(四)__由表逆向创建Domain对象和对象关系映射文件

    之前我们是手写Domain对象和对象关系映射文件->然后生成数据库中的Table. 现在我们反过来先在数据库中建好Table->然后用工具生成Domain对象和对象关系映射文件. 步骤: ...

  9. Hibernate基础学习(四)—对象-关系映射(上)

    一.映射对象标识符      Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键值来识别或区分同一个表的不同记录.Hibernate使用对象标识符(OID)来建立内存中的对象和数 ...

随机推荐

  1. PHP array_count_values() 函数用于统计数组中所有值出现的次数。

    定义和用法 array_count_values() 函数用于统计数组中所有值出现的次数. 本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数. 语法 array_count ...

  2. JavaEE基础(十三)

    1.常见对象(StringBuffer类的概述) A:StringBuffer类概述 通过JDK提供的API,查看StringBuffer类的说明 线程安全的可变字符序列 B:StringBuffer ...

  3. POJ 2763:Housewife Wind(树链剖分)

    http://poj.org/problem?id=2763 题意:给出 n 个点, n-1 条带权边, 询问是询问 s 到 v 的权值, 修改是修改存储时候的第 i 条边的权值. 思路:树链剖分之修 ...

  4. java final .static修饰符

    static静态修饰符(使用static修饰符修饰的成员变量.常量.和成员方法成为静态变量.常量和方法,他们统称为静态成员,归整个类所有,不依赖于类的特定实例,被类的所有实例共享,只要这个类被加载,J ...

  5. Djnago的一些零碎知识点

    1.TEMPLATE_DIRS relative to the project folder http://stackoverflow.com/questions/9856683/using-pyth ...

  6. The Cow Lexicon

    The Cow Lexicon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8815 Accepted: 4162 Descr ...

  7. UVa(247),Floyd做传递闭包

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  8. [转]实战 SQL Server 2008 数据库误删除数据的恢复

    实战 SQL Server 2008 数据库误删除数据的恢复 关键字:SQL Server 2008, recover deleted records 今天有个朋友很着急地打电话给我,他用delete ...

  9. (1)redis下载编译

    一.redis下载编译 这里没什么好说的 用的版本是redis-2.8.17 1)redis-server是可执行程序 2)mian函数在redis.c里面 3)如果要修改调试 这届在src目录下   ...

  10. Xcode的Architectures和Valid Architectures的区别,

    登录 | 注册 ys410900345的专栏 目录视图摘要视图订阅 学院APP首次下载,可得50C币!     欢迎来帮助开源“进步”     当讲师?爱学习?投票攒课吧     CSDN 2015博 ...