`

Hibernate 支持三种继承映射策略

阅读更多

1,subclass 元素映射子类:用一张表存储整个继承树的全部实例。
2,joined-subclass元素映射子类:继承树的每层实例对应一张表,且基类的表中保存所有子类的公有列,因此如需创建子类实例,总是需要查询基类的表数据,其子类所在深度越深,查询涉及到的表就越多。
3,unioned-subclass元素映射子类:继承树的每层实例对应一张表,每层的实例完整地保存在对应的表中,表中的每条记录即可对应一个实例。关于继承策略的选择,建议使用unioned-subclass的继承映射策略,理由如下。使用subclass 的映射策略时,因为整个继承树的全部实例都保存在一张表内,因此子类新增的数据列都不可增加非空约束,即使实际需要非空约束也不行,因为父类实例对应的记录根本没有该列,这将导致数据库的约束降低,同时也增加数据冗余,可以说这是最差的映射策略。
       使用joined-subclass 映射策略可以避免上面的问题,但使用这种映射策略时,如需查询多层下的子类,可能要访问的表数据过多,影响性能。而使用unioned-subclass 的映射策略则可以避免上面的两个问题。一旦映射了合适的继承策略, Hibernate 完全可以理解多态查询。即查询Parent 类的实例时,所有Parent 子类的实例也可被查询到。

Employee 和Manager 的映射文件,关系:Manager implements Emloyee
<?xml version="1.0"?>
<!-- Hibernate 映射文件的文件头,包含DTD 等信息-->
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.O.dtd" >
    <!-- Hibernate映射文件的根元素-->
    <hibernate-mapping package="com.xiaogang.model">
    <!-- 映射持久化类Employee -->
      <class name="Employee" table="emp_table">
        <!-- 映射标识属性 -->
        <id name="id" type="integer" column="emp_id">
         <!-- 指定主键生成器策略 -->
         <generator class="identity" />
        </id>
    <!-- 一映射普通属性name -->
    <property name="name" column="emp_name" type="string" not-null="true" length="50" unique="true"/>
   
    <!-- 一映射普通属性pass -->
    <property name="pass" column="emp-pass" type="string" not-null="true" length="50"/>
   
    <!-- 映射普通属性salary -->
    <property name="salary" column="emp_salary" type="double" not-null="true" />
   
    <!-- 映射关联的持久化类: Manager -->
    <many-to-one name="manager" column="mgr_id" lazy="false"/>
   
    <!-- 映射l-N 的关联关系: Attend -->
    <set name="attends"  inverse="true ">
        <key column="emp_id" />
        <one-to-many class="Attend"/>
    </set>
   
    <!-- 映射l-N 的关联关系: Payment -->
    <set name="payments" inverse="true">
        <key column="emp_id" />
        <one-to-many class="Payment"/>
    </set>
   
    <!-- 映射子类: Manager, 使用joined_subclass -->
        <joined-subclass name="Manager" table="mgr_table">
            <!-- 映射标识属性,该属性与父类的标示属性对应,无需主键生成器 -->
            <key column="mgr_id"/>
            <!--  映射普通属性dept -->
            <property name="dept" column="dept_name" type="string" not-null="true" length="50"/>
            <!--  映射l-N 关联关系,子类与父类具有关联-->
            <set name="employees" inverse="true">
                <key column="mgr_id" />
                <one-to-many class="Employee"/>
            </set>
            <!-- 映射l-N 关联关系 -->
            <set name="checks" inverse="true" >
                <key column="mgr_id" />
                <one-to-many class="CheckBack"/>
            </set>
        </joined-subclass>
    </class>
    </hibernate-mapping>

分享到:
评论

相关推荐

    Hibernate继承映射代码

    本主题将深入探讨"Hibernate继承映射+C3P0代码"的相关知识点。 首先,让我们理解Hibernate的继承映射。在Java中,我们可以创建一个基类,然后派生出多个子类,这种设计模式在数据库中也可以被映射出来。Hibernate...

    Hibernate教程17_继承映射

    在Java世界中,ORM(对象关系映射)框架如Hibernate极大地简化了数据库操作。本教程主要探讨的是Hibernate中的“继承映射...学习并实践这些例子,有助于巩固对Hibernate继承映射的理解,并提升在实际项目中的应用能力。

    Hibernate教程17_继承映射_补充2

    - Hibernate提供了四种继承映射策略:`SINGLE_TABLE`、`JOINED`、`TABLE_PER_CLASS` 和 `MAPPED_SUPERCLASS`。每种策略都有其适用场景。 - `JOINED`策略适用于那些子类数据较少或者子类数量较多的情况,因为它能...

    Hibernate教程17_继承映射_补充1

    在本教程中,我们将深入探讨Hibernate中的继承映射策略,特别是"Table Per Class"策略,这是Java对象模型到关系数据库映射的一种方法。在Hibernate框架中,继承是通过ORM(对象关系映射)来实现的,它允许我们将复杂...

    Hibernate继承映射的第一种策略:每棵类继承树对应一张表

    Hibernate继承映射是将Java类的继承关系映射到数据库表的一种策略,使得对象模型的复杂性能够平滑地转化为关系数据库模型。本篇将详细介绍Hibernate继承映射的第一种策略——每棵类继承树对应一张表,即单一表继承...

    Hibernate数据关联映射与继承策略

    **Hibernate继承策略** 在 Hibernate 中,为了处理对象模型中的继承关系,提供了以下几种继承策略: 1. **单表继承(Single Table Inheritance)**:所有子类共享同一张数据库表,使用一个标识字段来区分不同的...

    Hibernate入门到精通

    Hibernate支持三种继承映射策略: - 单表继承(Single Table Inheritance):所有子类数据都存储在同一个表中,通过一个鉴别器字段(discriminator column)来区分不同子类。 - 分类表继承(Table per Class ...

    Hibernate-api Hibernate文档

    Hibernate支持三种继承映射策略:Single Table、Table Per Class Hierarchies 和 Table Per Subclass。 十一、Hibernate事件监听 允许自定义监听器,如PreInsertEventListener、PreUpdateEventListener,实现特定...

    用Hibernate映射继承关系

    ### 用Hibernate映射继承关系 #### 14.1 继承关系树的每个具体类对应一个表 在Hibernate中映射继承关系时,一种常见的策略是将...通过了解这些不同的映射策略,你可以更有效地使用Hibernate来管理你的持久层逻辑。

    Hibernate继承映射的第一种策略:每个具体类一张表

    Hibernate通过多种继承映射策略解决了这一问题,其中“每个具体类一张表”是最为直观的一种。这种方式适用于子类较多,且子类之间差异较大的场景。 1. **基本概念** - **实体类**:在Hibernate中,被映射到数据库...

    Hibernate继承映射的第一种策略:每个类对应一张表

    本文将详细探讨“Hibernate继承映射的第一种策略:每个类对应一张表”的概念、实现方式以及其优缺点。 首先,我们需要理解Hibernate继承映射的基本策略。在面向对象编程中,类继承是常见的代码复用手段,但在数据库...

    hibernate继承映射.rar

    《Hibernate继承映射详解》 Hibernate,作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作。在实际项目中,我们常常会遇到类的继承关系,而Hibernate提供了强大的支持来处理这种继承关系的...

    Hibernate继承映射-概述

    Hibernate提供了三种继承映射策略: 1. **单表继承(Single Table Inheritance)**:所有子类的实例数据都存储在同一个数据库表中,通过一个特定的字段(通常是`discriminator`字段)来区分不同子类的对象。 2. **...

    hibernate 映射继承 demo

    Hibernate支持四种继承映射策略:单表继承(Single Table Inheritance)、联合继承( Joined Subclass)、表 per 类继承(Table per Class Inheritance)和子类表(Concrete Table Inheritance)。在实际应用中,最...

    Hibernate继承关系映射.pdf

    描述:“简明扼要地介绍了Hibernate中继承关系的映射方式,深入探讨了三种不同的映射策略及其优缺点,同时解析了多态查询的概念。” 知识点: ### Hibernate继承关系映射概述 在面向对象编程中,继承是核心概念之...

    Hibernate继承映射(annotation)

    本文将深入探讨使用注解配置的Hibernate继承映射策略,尤其是单表继承策略。 **一、Hibernate继承映射类型** 1. **单表继承(Single Table Inheritance)** - 这种策略将所有继承类的数据存储在一个单一的表中,...

Global site tag (gtag.js) - Google Analytics