`
c_fanatic
  • 浏览: 66300 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

映射类继承---Hibernate实战(1)

阅读更多
具有继承关系的实体类的映射的表现有四种方法:
1)每个带有隐式多态的而具体类一张表---使用非显示的继承映射和默认的运行时多态行为
   即每个子类一张表,并且父类的所有属性在每个子类里面都有对应列。
   主要问题在于,不太支持多态关联。还有就是多态查询。针对基类的查询必须作为几个SQL SELECT执行,每个具体子类一个。
   XML描述符中,Hibernate没有什么特殊设置,就像每个子类和一般的实体类没区别一样设置。
   对应的JPA:基类用@MappedSuperclass注解;可以为抽象类
              具体子类可以用@AttributeOverride注解来覆盖来自超类的列映射。
   XML描述符中,有<mapped-superclass class="......" access="FIELD">....</mapped-superclass>
         

2)每个具体类一张表.
   和1)一样,每个具体子类有一张表,但是它们的配置文件不一样
   Hibernate:用<union-subclass>继承策略
   <class name="baseClass" abstract="true"><id ....></id><property..../>
          <union-subclass name="sub-classA" table="A">....</union-subclass>
          <union-subclass name="sub-classB" table="B">....</union-subclass>
   </class>
  JPA注解中,这个策略称作TABLE_PER_CLASS
  数据库标识符和它的映射必须出现在超类中,在所有子类和它们的表中共享。
  XML描述符中
  <entity class="baseClass" access="FIELD">
        <inheritance strategy="TABLE_PER_CLASS"/>
        ......
  </entity>
  <entity class="sub-classA" access="FIELD"/>
  <entity class="sub-classB" access="FIELD"/>
如果超类是具体的,则需要另外一张表来存放这个类的实例。
对多台查询很有好处,如查找baseClass,它会把sub-classA和sub-classB都查出来union结果。

3)每个类层次结构一张表 --- 利用保存类型信息的一个类型辨别标志列
   即把所有子类的所有属性的列都包括在同一个表中,由特定行表示的具体子类通过一个类型辨别标识列的值来进行识别。
   问题就是有某些列不属于某个子类,而只属于别的子类。并且子类声明的属性的列必须声明可以为空。
   Hibernamte XML描述符
   <class name="baseClass" table="TableBase">
     <discriminator column="typeA" type="String" />
     <subclass name="sub-classA" discriminator-value="A">....</subclass>
     <subclass name="sub-classB" discriminator-value="B">....</subclass>
   </class>

   JPA XML描述符:---对应的策略是SINGLE_TABLE
   <entity class="baseClass" access="FIELD">
         <inheritance strategy="SINGLE_TABLE"/>
         <discriminator-column name="columnA" discriminator-tpe="STRING"/>
         ...
   </entity>
   <entity class="sub-classA" access="FIELD">
     <discriminator-value>A</discriminator-value>
     .....
   </entity>


4)每个子类一张表
   即把继承关系表示为相关的外键关联。声明持久化属性的每个类/子类(包括抽象类甚至接口)都有它自己的表。该表仅仅包含了每个非继承的属性(由子类本身声明的每个属性)以及也是超类表的外键的主键的列。即子表的主键是父表的外键。
  Hibernate用<joined-subclass>元素给每个子类映射创建一张表。
   <class name="baseClass" table="baseTable">
    ....
    <joined-subclass name="subClassA" table="tableA">
      <key column="columnA" />
      .......
   </class>
   当查询基类时候,依赖于外部联接(left join)

   JPA中对应的策略就是JOINED

还有一种就是混合策略。
  
分享到:
评论

相关推荐

    Hibernate实战

    《Hibernate实战》这本书深入浅出地探讨了Java领域中广泛使用的对象关系映射框架——Hibernate。Hibernate是一个开源的ORM框架,它为Java开发者提供了一种高效、便捷的方式来管理数据库操作,消除了Java对象与SQL...

    hibernate 映射继承 demo

    《Hibernate映射继承实战解析》 在Java世界中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者用面向对象的方式处理数据,而无需关心底层SQL语句的编写。在大型项目中,...

    hibernate开发与实战 源代码

    《Hibernate开发与实战》源代码提供了深入学习和实践Hibernate框架的机会。这个压缩包包含了从CHAPTER01到CHAPTER22的源代码示例,涵盖了Hibernate框架的多个关键方面。遗憾的是,由于文件大小限制,几个项目和必要...

    JavaEE企业应用实战-Struts2+Spring3+Hibernate整合开发(第3版)

    ### JavaEE企业应用实战-Struts2+Spring3+Hibernate整合开发(第3版)核心知识点解析 #### 一、JavaEE概述与架构 - **JavaEE简介**:JavaEE(Java Platform, Enterprise Edition)是Java平台的企业版,提供了一套...

    Hibernate实战笔记

    ### Hibernate实战笔记——深入解析对象关系映射与优化策略 #### 一、对象关系映射(ORM)概念 - **什么是持久化**:在计算机科学领域,“持久化”指的是将程序的数据状态保存到非易失性的存储介质中,以便可以在...

    Hibernate实战(第2版 中文高清版)

     5.1 映射类继承   5.1.1 每个带有隐式多态的具体类一张表   5.1.2 每个带有联合的具体类一张表   5.1.3 每个类层次结构一张表   5.1.4 每个子类一张表   5.1.5 混合继承策略   5.1.6 选择策略   5.2...

    Hibernate实战(第2版).pdf

    《Hibernate实战(第2版)》是一本深入探讨Java持久化框架Hibernate的专业书籍,它针对的是Java开发人员,特别是那些希望提升数据库管理效率和优化应用程序性能的开发者。Hibernate作为一个开源的对象关系映射(ORM...

    Hibernate中文参考手册

    - **继承映射**: 支持单表、联合表等多种继承映射模式,适用于具有层次结构的数据模型。 #### 五、高级特性与最佳实践 - **缓存管理**: Hibernate支持一级缓存和二级缓存,合理利用缓存可以显著提升应用性能。 - *...

    Hibernate实战(第2版)

    ### Hibernate实战(第2版)知识点详解 #### 一、Hibernate框架概述 1. **定义与特点**: - **Hibernate**是一种Java环境下基于JDBC API的ORM(Object Relational Mapping)框架,它提供了从Java类到数据库表以及从...

    hibernate实战培训课程.ppt

    【hibernate实战培训课程】 本课程旨在深入解析Hibernate这一流行的Java对象关系映射(ORM)框架,旨在帮助开发者理解并熟练运用Hibernate进行数据库操作。课程涵盖了O/R Mapping(对象关系映射)的基本原理,以及...

    hibernate-3.6.8-doc-zh

    1. Hibernate配置:包括数据库连接信息、实体类映射文件的加载、缓存设置等,通常在`hibernate.cfg.xml`中完成。 2. 实体类设计:使用Java类来代表数据库中的表,使用注解进行映射。 3. Session工厂和Session:通过...

    美河图书提供.孙卫琴.精通Hibernate

    - **继承的映射**:处理具有继承关系的类与数据库表之间的映射关系。 - **一对一(One-to-One)**、**一对多(One-to-Many)**、**多对一(Many-to-One)**和**多对多(Many-to-Many)**关联关系的映射。 #### 3. ...

    在Myeclipse中搭建的一个Hibernate小程序

    实体类通常会继承Hibernate的Serializable接口,用于持久化。映射文件(可能是.hbm.xml)定义了实体类与数据库表的对应关系。测试代码通常在main方法或JUnit测试类中,展示了如何使用SessionFactory创建Session,...

    轻量级JavaEE企业应用实战-Struts 2+Spring 3+Hibernate整合开发part6-2

    本书包括三部分,第一部介绍Java EE开发的基础知识,以及如何搭建开发环境;第二部分详细讲解Struts ...第三部分示范开发了一个包含7个表、表之间具有复杂的关联映射、继承映射等关系,且业务也相对复杂的工作流案例。

    Manning - Java Persistence With Hibernate

    2. **对象关系映射(ORM)**:详细讲解如何使用Hibernate的XML映射文件或注解来定义对象和数据库表之间的映射关系,包括字段映射、关联映射(一对一、一对多、多对一、多对多)以及继承映射策略。 3. **Session和...

    formacao-java-alura-jpa-hibernate-modulo2:jpa-hibernate-modulo2

    《Java JPA与Hibernate实战教程——模块二》 在Java开发领域,JPA(Java Persistence API)和Hibernate作为主流的ORM(对象关系映射)框架,对于数据持久化有着至关重要的作用。本教程的第二模块深入探讨了这两个...

    Hibernate 入门

    #### 二、Hibernate入门实战 - **第一个Hibernate程序**: - 创建一个简单的Java类,定义实体模型。 - 使用Hibernate提供的API创建SessionFactory和Session。 - 通过Session执行CRUD操作。 - **配置文件**: - ...

    hibernate-release-4.3.8.Final

    在Hibernate中,每个Java类可以映射为一个数据库表,类的实例对应表中的行。通过注解或XML配置,我们可以定义字段与列的映射,以及主键生成策略等。 四、缓存机制 Hibernate 4.3.8.Final引入了第二级缓存,它可以跨...

Global site tag (gtag.js) - Google Analytics