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映射继承关系
Hibernate案例与专题-继承映射策略。详细介绍了Hibernate继承映射策略。
博文链接:https://shaqiang32.iteye.com/blog/201319
Hibernate的继承映射 --每个继承层次一张表 -- 每个具体类一张表 -- 每个类一张表
针对hibernate的继承映射部分做了几个测试的例子,更加直观的阐述了继承映射的几种方式以及对应的表结构方式,文件被分割成3部分 http://download.csdn.net/source/259075 http://download.csdn.net/source/259072 ...
hibernate实现继承关系映射的方式有三种,这种方式是将每个类都映射成一张表。
博文链接:https://shaqiang32.iteye.com/blog/201321
hibernate继承关系映射和java反射机制的运用
Hibernate继承关系映射.pdf 简单明了
针对hibernate的继承映射部分做了几个测试的例子,更加直观的阐述了继承映射的几种方式以及对应的表结构方式,文件被分割成3部分 http://download.csdn.net/source/259075 http://download.csdn.net/source/259072 ...
简单的使用了hibernate的继承,用idea搭建,适合刚刚开始学习hibernate的初学者参考
Hibernate数据关联映射与继承策略.rar
从多种情况介绍Hibernate的继承多态映射关系
该资源包含了一些常用的hibernate关联映射实例。包括一对多,多对多,继承映射,等,是学习hibernate的必备品
NULL 博文链接:https://quicker.iteye.com/blog/658432
那么,这种继承关系在hibernate是如何映射呢? 对于面向对象的程序设计语言而言,继承和多态是两个最基本的概念。hibernate的集成映射可以理解为持久化类之间的继承关系。在上边的例子中,学生集成了人,可以认为...