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继承映射+C3P0代码"的相关知识点。 首先,让我们理解Hibernate的继承映射。在Java中,我们可以创建一个基类,然后派生出多个子类,这种设计模式在数据库中也可以被映射出来。Hibernate...
在Java世界中,ORM(对象关系映射)框架如Hibernate极大地简化了数据库操作。本教程主要探讨的是Hibernate中的“继承映射...学习并实践这些例子,有助于巩固对Hibernate继承映射的理解,并提升在实际项目中的应用能力。
- Hibernate提供了四种继承映射策略:`SINGLE_TABLE`、`JOINED`、`TABLE_PER_CLASS` 和 `MAPPED_SUPERCLASS`。每种策略都有其适用场景。 - `JOINED`策略适用于那些子类数据较少或者子类数量较多的情况,因为它能...
在本教程中,我们将深入探讨Hibernate中的继承映射策略,特别是"Table Per Class"策略,这是Java对象模型到关系数据库映射的一种方法。在Hibernate框架中,继承是通过ORM(对象关系映射)来实现的,它允许我们将复杂...
Hibernate继承映射是将Java类的继承关系映射到数据库表的一种策略,使得对象模型的复杂性能够平滑地转化为关系数据库模型。本篇将详细介绍Hibernate继承映射的第一种策略——每棵类继承树对应一张表,即单一表继承...
**Hibernate继承策略** 在 Hibernate 中,为了处理对象模型中的继承关系,提供了以下几种继承策略: 1. **单表继承(Single Table Inheritance)**:所有子类共享同一张数据库表,使用一个标识字段来区分不同的...
Hibernate支持三种继承映射策略: - 单表继承(Single Table Inheritance):所有子类数据都存储在同一个表中,通过一个鉴别器字段(discriminator column)来区分不同子类。 - 分类表继承(Table per Class ...
Hibernate支持三种继承映射策略:Single Table、Table Per Class Hierarchies 和 Table Per Subclass。 十一、Hibernate事件监听 允许自定义监听器,如PreInsertEventListener、PreUpdateEventListener,实现特定...
### 用Hibernate映射继承关系 #### 14.1 继承关系树的每个具体类对应一个表 在Hibernate中映射继承关系时,一种常见的策略是将...通过了解这些不同的映射策略,你可以更有效地使用Hibernate来管理你的持久层逻辑。
Hibernate通过多种继承映射策略解决了这一问题,其中“每个具体类一张表”是最为直观的一种。这种方式适用于子类较多,且子类之间差异较大的场景。 1. **基本概念** - **实体类**:在Hibernate中,被映射到数据库...
本文将详细探讨“Hibernate继承映射的第一种策略:每个类对应一张表”的概念、实现方式以及其优缺点。 首先,我们需要理解Hibernate继承映射的基本策略。在面向对象编程中,类继承是常见的代码复用手段,但在数据库...
《Hibernate继承映射详解》 Hibernate,作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作。在实际项目中,我们常常会遇到类的继承关系,而Hibernate提供了强大的支持来处理这种继承关系的...
Hibernate提供了三种继承映射策略: 1. **单表继承(Single Table Inheritance)**:所有子类的实例数据都存储在同一个数据库表中,通过一个特定的字段(通常是`discriminator`字段)来区分不同子类的对象。 2. **...
Hibernate支持四种继承映射策略:单表继承(Single Table Inheritance)、联合继承( Joined Subclass)、表 per 类继承(Table per Class Inheritance)和子类表(Concrete Table Inheritance)。在实际应用中,最...
描述:“简明扼要地介绍了Hibernate中继承关系的映射方式,深入探讨了三种不同的映射策略及其优缺点,同时解析了多态查询的概念。” 知识点: ### Hibernate继承关系映射概述 在面向对象编程中,继承是核心概念之...
本文将深入探讨使用注解配置的Hibernate继承映射策略,尤其是单表继承策略。 **一、Hibernate继承映射类型** 1. **单表继承(Single Table Inheritance)** - 这种策略将所有继承类的数据存储在一个单一的表中,...