我的见解之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.


1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 作废的发票没了怎么办 键盘esc键坏了怎么办 cad中esc键失灵怎么办 出家人老了病了怎么办 宜家吸盘吸不住怎么办 车内吸盘吸不住怎么办 水里吸盘吸不住怎么办 摩托车脱审4年怎么办 摩托车8年没年检怎么办 摩托车4年没年检怎么办 38度5算高烧吗怎么办 刚发现怀孕不想要怎么办 被蜥蜴咬出血了怎么办 去韩国打工签证怎么办多么钱 厕所堵了怎么办有妙招 蹲式厕所老是堵怎么办 下蹲式厕所堵了怎么办 蹲的厕所堵住了怎么办 厕所通了又堵怎么办 蹲式厕所经常堵怎么办 厕所下水管堵了怎么办 厕所堵了水满了怎么办 拉屎把厕所堵了怎么办 厕所堵了不下水怎么办 坐厕所堵了怎么办妙招 火车上丢了东西怎么办 网购的东西丢了怎么办 在酒店丢了东西怎么办 我好懒不想工作怎么办 被宠物刺猬咬了怎么办 被老鼠咬了怎么办打针 手指被老鼠咬了怎么办 孕妇被老鼠咬了怎么办 耳朵里面一直嗡嗡响怎么办 把语言栏删了怎么办 乐视会员到期了怎么办 预提费用取消了怎么办 小学生上课注意力不集中怎么办 工商抽查到你了怎么办 拿到商调函后该怎么办 苹果7p掉水里了怎么办