hibernate详解(二)----->>继承关系映射(二、三)
这篇文章紧接着hibernate详解(二)----->>继承关系映射(一)。
下面介绍另外两种关系继承关系映射方案:
第二种:每个子类一张表
其他的类都一样,就有一个xml文件不一样,里面有些内容不一样
Student.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 映射持久化类 -->
<class name="com.zxf.domain.Singer" table="singer">
<!-- 映射对象标识符 -->
<id name="id" column="id" type="long">
<generator class="native" />
</id>
<!-- 映射普通属性 -->
<property name="name" />
<property name="region" />
<property name="description" />
<!-- 用joined-subclass元素给每个子类映射到一张表 -->
<joined-subclass name="com.zxf.domain.SingleSinger"
table="single_singer">
<!-- 用key元素来指定子类和父类之间是通过哪个字段来关联的 -->
<key column="singler_id" />
<!-- 映射本子类的属性 -->
<property name="gender" />
</joined-subclass>
<!-- 用joined-subclass元素给每个子类映射到一张表 -->
<joined-subclass name="com.zxf.domain.Bands"
table="bands">
<!-- 用key元素来指定子类和父类之间是通过哪个字段来关联的 -->
<key column="bands_id" />
<!-- 映射本子类的属性 -->
<property name="leader"/>
</joined-subclass>
</class>
</hibernate-mapping>
运行结果如下图所示:
第三种:每个具体类一张表
其他的类都一样,就有一个xml文件不一样,里面有些内容不一样
Student.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 指定此类为抽象类 -->
<class name="com.zxf.domain.Singer" abstract="true">
<!-- 映射对象标识符 -->
<id name="id" column="id" type="long">
<!-- 映射主键生成方式为由Java应用程序负责生成标识符 -->
<generator class="assigned" />
</id>
<!-- 映射普通属性 -->
<property name="name" />
<property name="region" />
<property name="description" />
<!-- 用union-subclass元素给每个具体子类映射到一张表 -->
<union-subclass name="com.zxf.domain.SingleSinger"
table="single_singer">
<!-- 映射本子类的属性 -->
<property name="gender" />
</union-subclass>
<!-- 用union-subclass元素给每个具体子类映射到一张表 -->
<union-subclass name="com.zxf.domain.Bands"
table="bands">
<!-- 映射本子类的属性 -->
<property name="leader"/>
</union-subclass>
</class>
</hibernate-mapping>
运行结果如下图所示:
备注:
继承映射最常用的方案就是以上介绍的三种,在实际开发中,怎么选择合适的方案,笔者根据自己的工作经验,给读者提供一些经验。
- 如果不需要度多态查询:使用每个具体类一张表。
-
一定要使用多态查询:子类中的属性相对较少,使用每个继承层次一张表。
-
子类中的属性较多,使用每个子类一张表。
-
简单的问题一般选择每个继承层次一张表,复杂案例额一般选择每个子类一表。
分享到:
相关推荐
《Hibernate继承映射详解》 在Java开发中,对象关系映射(ORM)框架如Hibernate大大简化了数据库操作。Hibernate不仅提供了对基本数据类型的映射,还支持复杂的数据结构,如继承关系的映射。本篇文章将深入探讨...
Hibernate是Java领域中一款强大的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了Java数据库编程。在这个“hibernate技术详解”中,我们将深入探讨Hibernate的核心概念、配置、...
在当今的Web开发领域,数据持久化是一个必不可少的环节,而Hibernate作为Java领域广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,随着互联网应用的规模不断扩大,对数据访问速度的要求也日益...
8. **继承映射** - `@Inheritance`: 控制类的继承策略,如SINGLE_TABLE、JOINED、TABLE_PER_CLASS。 - `@DiscriminatorValue`: 用于多态继承,定义子类在父类表中的区分值。 9. **复合主键** - `@EmbeddedId`: ...
本主题聚焦于“用Hibernate映射继承关系”,我们将深入探讨Hibernate如何处理对象的继承层次结构,并将其映射到数据库中的表。 Hibernate支持多种继承策略,包括单一表继承(Single Table Inheritance)、联合表...
《Hibernate核心组件:hibernate-annotations-3.4.0.jar详解》 在Java世界里,ORM(Object-Relational Mapping)框架是连接数据库的重要工具,其中Hibernate作为一款广泛应用的ORM框架,大大简化了数据库操作。而`...
二、关联关系映射 紧接着,文档深入探讨了关联关系的映射,这是ORM框架中的关键主题之一。从单向基于集合的关联映射开始,文档展示了如何在Hibernate中表示一对多的关系。随后,通过双向关联的处理,揭示了如何维护...
2. 强大的对象关系映射:支持复杂的数据结构,如集合、多对多关系、继承等。 3. 支持HQL(Hibernate Query Language):一种面向对象的查询语言,类似于SQL,但更加符合Java的编程思维。 4. Criteria API:提供了一...
《Hibernate继承映射详解》 Hibernate,作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作。在实际项目中,我们常常会遇到类的继承关系,而Hibernate提供了强大的支持来处理这种继承关系的...
2. 继承映射:支持单表、表-per-hierarchy、表-per-subclass 等继承策略。 3. 联接查询和子查询:优化查询性能,避免 N+1 问题。 4. 延迟加载(Lazy Loading):按需加载关联对象,减少内存消耗。 5. 动态模型:无需...
### Hibernate入门知识点详解 #### 一、概述 在IT领域,特别是软件开发中,数据库与对象之间的交互一直是项目中的核心部分。为了更好地处理这一过程,众多框架和技术应运而生,其中Hibernate作为一款优秀的对象...
《SpringBoot与Hibernate整合实战详解》 在现代Java开发领域,SpringBoot和Hibernate是两个非常重要的框架,它们各自为开发者提供了高效、便捷的工具。SpringBoot简化了Spring应用的初始搭建以及开发过程,而...
### 继承映射 `<discriminator>` 如果类使用了继承,`<discriminator>`元素可以用来表示子类标识符,通常用于单一表继承策略。 ```xml <discriminator column="subclass" type="character"/> ``` ### 关联映射 -...
### Hibernate的继承多态映射关系详解 在软件开发领域,特别是使用面向对象编程语言如Java进行开发时,我们经常需要处理复杂的类继承关系。在ORM(Object-Relational Mapping)框架如Hibernate中,如何优雅地将这些...
**标题:“Hibernate继承映射(Annotation)详解”** 在Java持久化框架Hibernate中,继承映射是一种关键特性,它允许开发者将对象模型的继承结构映射到数据库的表结构。在传统的面向对象编程中,继承是实现代码复用和...
- 继承映射 - 查询分析 - 复杂类型映射 ### 总结 本课程全面介绍了Hibernate的基本概念、配置与使用方法。从简单的HelloWorld示例入手,逐步深入到核心开发接口、关系映射、查询语言以及性能优化等多个方面,...
在Java开发领域,ORM(对象关系映射)框架是连接数据库的重要工具,而Hibernate作为其中的佼佼者,一直以来都深受开发者喜爱。本篇文章将深入探讨 Hibernate 实体管理器(Hibernate EntityManager)3.2版本的核心...
《Hibernate注解3.1beta6详解》 Hibernate作为Java领域中最流行的ORM(对象关系映射)框架之一,极大地简化了数据库操作。其中,Hibernate注解是其核心特性之一,它允许开发者通过在实体类上添加注解来描述数据表...
**hibernate包详解** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库和面向对象编程之间架起桥梁的解决方案。通过使用Hibernate,开发人员可以避免直接编写SQL语句,而是用...
《Hibernate Annotations 3.4.0:持久化框架的注解增强详解》 Hibernate作为Java领域最著名的对象关系映射(ORM)框架之一,极大地简化了数据库操作。在3.4.0版本中,它引入了Annotations特性,使得Java开发者能够...