我的见解之hibernate(十一)
来源:互联网 发布:互联网共享打印机端口 编辑:程序博客网 时间:2024/05/17 08:56
映射具有继承关系的两个表:
person和student可以看出,student继承自person,在映射文件中我们有三种表现形式
①.父子同表,但是要添加辨别者列
<span style="font-size:24px;"><hibernate-mapping package="com.jiangtao.hibernate.subclass"> <class name="Person" table="PERSONS" discriminator-value="PERSON"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="native" /> </id> <!-- 配置辨别者列 --><discriminator column="TYPE" type="string"></discriminator> <property name="name" type="java.lang.String"> <column name="NAME" /> </property> <property name="age" type="int"> <column name="AGE" /> </property> <!-- 映射子类 Student, 使用 subclass 进行映射 --> <subclass name="Student" discriminator-value="STUDENT"> <property name="school" type="string" column="SCHOOL"></property> </subclass> </class></hibernate-mapping></span>
* 缺点:
* 1. 使用了辨别者列.
* 2. 子类独有的字段不能添加非空约束.
* 3. 若继承层次较深, 则数据表的字段也会较多.
* 查询:
* 1. 查询父类记录, 只需要查询一张数据表
* 2. 对于子类记录, 也只需要查询一张数据表
* 插入操作:
* 1. 对于子类对象只需把记录插入到一张数据表中.
* 2. 辨别者列有 Hibernate 自动维护.
②父子不同表,字表中只有属于自己的字段
joined-subclass
<span style="font-size:24px;"> <joined-subclass name="Student" table="STUDENTS"> <key column="STUDENT_id" not-null="true"></key> <property name="school" type="string" column="SCHOOL"></property> </joined-subclass></span>* 优点:
* 1. 不需要使用了辨别者列.
* 2. 子类独有的字段能添加非空约束.
* 3. 没有冗余的字段.
* 查询:
* 1. 查询父类记录, 做一个左外连接查询
* 2. 对于子类记录, 做一个内连接查询.
* 插入操作:
* 1. 对于子类对象至少需要插入到两张数据表中.
③父子各自都有自己的表,字表有完整字段,冗余严重
union-class
<span style="font-size:24px;"><union-subclass name="Student" table="STUDENTS"><property name="school" column="SCHOOL" type="string"></property></union-subclass> </span>
* 优点:
* 1. 无需使用辨别者列.
* 2. 子类独有的字段能添加非空约束.
*
* 缺点:
* 1. 存在冗余的字段
* 2. 若更新父表的字段, 则更新的效率较低
* 查询:
* 1. 查询父类记录, 需把父表和子表记录汇总到一起再做查询. 性能稍差.
* 2. 对于子类记录, 也只需要查询一张数据表
* 插入操作:
* 1. 对于子类对象只需把记录插入到一张数据表中.
子类实例的数据仅保存在子类表中, 而在父类表中没有任何记录
在这种映射策略下,子类表的字段会比父类表的映射字段要多,因为子类表的字段等于父类表的字段、加子类增加属性的总和
在这种映射策略下,既不需要使用鉴别者列,也无须使用 key 元素来映射共有主键.
使用 union-subclass 映射策略是不可使用 identity 的主键生成策略, 因为同一类继承层次中所有实体类都需要使用同一个主键种子, 即多个持久化实体对应的记录的主键应该是连续的. 受此影响, 也不该使用 native 主键生成策略, 因为 native 会根据数据库来选择使用 identity 或 sequence.
- 我的见解之hibernate(十一)
- 我的见解之hibernate(二)
- 我的见解之hibernate(三)
- 我的见解之hibernate(四)
- 我的见解之hibernate(五)
- 我的见解之hibernate(六)
- 我的见解之hibernate(七)
- 我的见解之hibernate(八)
- 我的见解之hibernate(九)
- 我的见解之hibernate(十)
- 我的见解之hibernate(十二)
- 我的见解之hibernate(十三)
- linux之我的见解
- NSfileManager 之我的见解
- 我的注入方法之个人见解!
- linux USB子系统之我的见解。
- 金庸武侠小说之我的见解
- 金庸武侠小说之我的见解
- 剑指-用两个栈实现队列
- Android之Http通信Json解析
- 分享国内外好用的H5页面制作网站
- 学习了一下XML,并结合相应的知识讲解了一下spring的dubbo配置
- nodejs中 exports 和 module.exports 的区别
- 我的见解之hibernate(十一)
- BZOJ3714 [PA2014]Kuglarz
- JAVA学习第二周——数组
- Android WebView加载后有白边框的问题
- 第13章[1]:运算符的重载基本属性
- 批量建立软链接
- android输入框自动顶上去问题解决。
- Hibernate基础知识(7)
- s3cmd 快速评估RADOSGW的性能