hibernate继承之一,单表继承映射
对象有继承,而对于数据结构来说,如何在映射中体现这种关系。借助hibernate,我们在对表的映射中能够体现这种关系和设计。
相信我们在设计表的时候经常有这种情况,会用一个type字段来表示这张表的两种形式。而反映到java对象中,其实应该是两个对象,不过有很多相同的共同属性。但实际一般来说都会只用一个类,在查询是用type指定值来分辨。
hibernate提供了一种继承的映射来实现这种对象的继承关系。
以合同表举例,比如我分为A类合同和B类合同,逻辑处理并不一样,但数据结构基本是相同的,可能只有1-2个字段不相同,这种情况可以使用hibernate三种继承中的一种,个人觉得这种的使用情况会比较多。因为这种情况不会涉及到多表联查。
设计三个类,合同,A类合同,B类合同。type字段进行区分,0为A,1为B。type用int类型还是用string类型,在hbm文件中区别。hbm文件如下
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping> <class name="合同类" table="TB_CONTRACT" discriminator-value="not null" <!--如果区别字段是整数类型,则需要声明辨别值不为NULL,如果是string类型,则不必加入这句--> > <id name="id" type="long" column="ID" > <generator class="native" /> </id> <!-- 用该字段作为辨别,用元素discriminator--> <discriminator column="CONTRACT_TYPE" type="int" ></discriminator> <property name="contractName" type="java.lang.String" column="CONTRACT_NAME" /> <property name="levelLink" type="java.lang.String" column="LEVEL_LINK" /> <property name="code" type="java.lang.String" column="CODE" not-null="true" unique="true" /> <!-- bi-directional one-to-many association to LkPmContractItem --> <set name="lkPmContractItems" lazy="true" inverse="true" cascade="none" > <key> <column name="CONTRACT_ID_FK" /> </key> <one-to-many class="com.qeweb.lonking.pm.contract.bo.PmContractItemBO" /> </set> <!-- 最后用subclass声明子类,discriminator-value属性指定对应的值 --> <subclass name="A合同类名" discriminator-value="0"> </subclass> <subclass name="B合同类名" discriminator-value="1"> </subclass> </class> </hibernate-mapping>
至此,Hibernate关于单表映射成继承关系就完成了。
另外,如果你对于子类有分别需要映射的字段,那么需要在<subclass></subclass>中添加。
关键字:discriminator-value,discriminator,subclass
如果需要在父类中仍然要使用类型字段,需要在此字段的声明上加入
insert=false,update=false才可以。
相关推荐
本主题将深入探讨"Hibernate继承映射+C3P0代码"的相关知识点。 首先,让我们理解Hibernate的继承映射。在Java中,我们可以创建一个基类,然后派生出多个子类,这种设计模式在数据库中也可以被映射出来。Hibernate...
Hibernate继承映射是将Java类的继承关系映射到数据库表的一种策略,使得对象模型的复杂性能够平滑地转化为关系数据库模型。本篇将详细介绍Hibernate继承映射的第一种策略——每棵类继承树对应一张表,即单一表继承...
使用单表映射,你仍然可以像处理普通对象一样操纵`Employee`对象,Hibernate会在后台处理所有必要的类型转换和存储。 #### 14.3 继承关系树的每个类对应一个表 第三种映射方式是**类表映射**(Class-Table ...
本教程以“Hibernate-lab2”为例,将深入探讨Hibernate中的继承映射,为初学者提供一个清晰的学习路径。 一、Hibernate继承映射概述 Hibernate继承映射是将Java中的继承关系映射到数据库的关系模型中。在Java中,...
本文档主要聚焦于Hibernate框架下继承关系的映射,通过三种不同的策略——隐式继承映射、单表映射和关联表映射,来实现类的继承结构在数据库中的映射。 ### 隐式继承映射 #### 定义与配置 隐式继承映射也称为“表...
这种方式也被称为单表继承或多表继承,是Hibernate支持的四种继承映射策略之一。了解并熟练掌握这种映射模式对于提升Java开发效率和代码维护性至关重要。 在传统的面向对象编程中,类可以有继承关系,但在关系...
Hibernate的继承映射 --每个继承层次一张表 -- 每个具体类一张表 -- 每个类一张表
综上所述,Hibernate的单表继承映射是实现对象模型与数据库模型映射的一种有效方法。它简化了数据库设计,但需要根据具体项目需求权衡利弊,选择合适的继承策略。在实际开发中,开发者应根据业务场景和性能需求,...
本篇文章将深入探讨Hibernate中的继承映射机制,帮助开发者更好地理解和运用这一强大的功能。 继承是面向对象编程中的核心概念,它允许类之间共享属性和行为。在数据库设计中,有时也需要用到类似的概念,例如,...
总结:本文详细介绍了Hibernate的两种主要继承映射策略——单表继承和联合继承,并通过一个具体的Java代码示例展示了如何在项目中实现它们。理解并灵活运用这些策略,可以帮助我们更高效地处理对象关系映射,提升...
在Hibernate中,继承映射主要有三种策略:单表继承(Single Table Inheritance)、联合继承( Joined Table Inheritance)和表格-per-类继承(Table per Concrete Class)。本教程可能主要关注的是单表继承,这也是...
总结起来,"每个类都对应一张表"的继承映射策略在Hibernate中是一种直接且易于理解的方法,适合那些每个类都有独特属性的情况。然而,它可能不适合所有场景,特别是当子类众多或者需要减少数据冗余时。在实际应用中...
- 如果父类有多个子类,且子类间有共享的属性,会导致数据冗余,可能需要考虑其他继承映射策略,如“单表继承”或“联合继承”。 6. **源码与工具** 提供的压缩文件`hibernate_ext_3`可能包含了对Hibernate 3.x...
这种映射策略是Hibernate提供的多种继承映射方案之一,适用于处理复杂的对象模型。 首先,我们要理解什么是继承映射。在面向对象编程中,类可以继承自其他类,形成类的继承树。在数据库中,如果要存储这些继承关系...
综上所述,"14 继承(一)(整个继承树映射到一张表)"这一主题涉及的是在Hibernate中如何处理类继承关系的一种常见策略——单表继承。理解并熟练掌握这种策略对于使用Hibernate进行数据库操作的开发者来说至关重要,...