`

hibernate详解(二)----->>继承关系映射(二、三)

阅读更多

 

      这篇文章紧接着hibernate详解(二)----->>继承关系映射(一)。

    下面介绍另外两种关系继承关系映射方案:

      第二种:每个子类一张表

 

      其他的类都一样,就有一个xml文件不一样,里面有些内容不一样

 

      Student.hbm.xml

 

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   
  4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5.   
  6. <hibernate-mapping>  
  7.     <!-- 映射持久化类 -->  
  8.     <class name="com.zxf.domain.Singer" table="singer">  
  9.         <!-- 映射对象标识符 -->  
  10.         <id name="id" column="id" type="long">  
  11.             <generator class="native" />  
  12.         </id>  
  13.   
  14.         <!-- 映射普通属性 -->  
  15.         <property name="name" />  
  16.         <property name="region" />  
  17.         <property name="description" />  
  18.            
  19.         <!-- 用joined-subclass元素给每个子类映射到一张表 -->  
  20.         <joined-subclass name="com.zxf.domain.SingleSinger"    
  21.                     table="single_singer">  
  22.             <!-- 用key元素来指定子类和父类之间是通过哪个字段来关联的 -->  
  23.             <key column="singler_id" />  
  24.             <!-- 映射本子类的属性 -->  
  25.             <property name="gender" />  
  26.         </joined-subclass>  
  27.         <!-- 用joined-subclass元素给每个子类映射到一张表 -->  
  28.         <joined-subclass name="com.zxf.domain.Bands"    
  29.                     table="bands">  
  30.           <!-- 用key元素来指定子类和父类之间是通过哪个字段来关联的 -->  
  31.             <key column="bands_id" />  
  32.             <!-- 映射本子类的属性 -->  
  33.             <property name="leader"/>  
  34.         </joined-subclass>  
  35.     </class>  
  36. </hibernate-mapping>  
<?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代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   
  4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5.   
  6. <hibernate-mapping>  
  7.     <!-- 指定此类为抽象类 -->  
  8.     <class name="com.zxf.domain.Singer" abstract="true">  
  9.         <!-- 映射对象标识符 -->  
  10.         <id name="id" column="id" type="long">  
  11.             <!-- 映射主键生成方式为由Java应用程序负责生成标识符 -->  
  12.             <generator class="assigned" />  
  13.         </id>  
  14.         <!-- 映射普通属性 -->  
  15.         <property name="name" />  
  16.         <property name="region" />  
  17.         <property name="description" />  
  18.            
  19.         <!-- 用union-subclass元素给每个具体子类映射到一张表 -->  
  20.         <union-subclass name="com.zxf.domain.SingleSinger"    
  21.                     table="single_singer">  
  22.             <!-- 映射本子类的属性 -->  
  23.             <property name="gender" />  
  24.         </union-subclass>  
  25.         <!-- 用union-subclass元素给每个具体子类映射到一张表 -->  
  26.         <union-subclass name="com.zxf.domain.Bands"    
  27.                     table="bands">  
  28.             <!-- 映射本子类的属性 -->  
  29.             <property name="leader"/>  
  30.         </union-subclass>  
  31.     </class>  
  32. </hibernate-mapping>  
<?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 对象持久化技术详解(第2版).part2

     12.4 选择继承关系的映射方式  12.5 映射多对一多态关联  12.6 小结  12.7 思考题 第13章 Java集合类  13.1 Set(集)  13.1.1 Set的一般用法  13.1.2 HashSet类  13.1.3 TreeSet类  13.1.4 向Set中加入...

    Hibernate_映射配置文件详解

    Hibernate_映射配置文件详解,个人觉的比较不错的关于hibernate讲解的ppt,对于xml配置,继承关系,多对多等关系映射讲的很详细!

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和...

    Hibernate详解

    该文档详细讲解了Hibernate的几个核心技术:Hibernate的配置文件、缓存机制、查询策略、事务管理、HQL和QBC、一对多、一对一、多对多映射关系、继承映射等,并且还有配有实例。

    hibernate 框架详解

    10. 继承映射(Inheritance Mappings) 10.1. 三种策略 10.1.1. 每个类分层结构一张表(Table per class hierarchy) 10.1.2. 每个子类一张表(Table per subclass) 10.1.3. 每个子类一张表(Table per subclass),...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     12.4 选择继承关系的映射方式  12.5 映射多对一多态关联  12.6 小结  12.7 思考题 第13章 Java集合类  13.1 Set(集)  13.1.1 Set的一般用法  13.1.2 HashSet类  13.1.3 TreeSet类  13.1.4 向Set中加入...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     12.4 选择继承关系的映射方式  12.5 映射多对一多态关联  12.6 小结  12.7 思考题 第13章 Java集合类  13.1 Set(集)  13.1.1 Set的一般用法  13.1.2 HashSet类  13.1.3 TreeSet类  13.1.4 向Set中加入...

    Hibernate 课件_配置文件详解

    我培训用的 Hibernate课件, 个人能力范围内精心整理,图文并茂. 希望能对大家学习 Hibernate 提供帮助. 这是第二篇, 内容如下:Hibernate配置文件;jdbc.fetch_size;jdbc.batch_size; POJO 类和数据库的映射...继承映射

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     12.4 选择继承关系的映射方式  12.5 映射多对一多态关联  12.6 小结  12.7 思考题 第13章 Java集合类  13.1 Set(集)  13.1.1 Set的一般用法  13.1.2 HashSet类  13.1.3 TreeSet类  13.1.4 向Set中加入...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和...

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

    第二部分 映射概念和策略  第4章 映射持久化类   4.1 理解实体和值类型   4.1.1 细粒度的领域模型   4.1.2 定义概念   4.1.3 识别实体和值类型   4.2 映射带有同一性的实体   4.2.1 理解Java同一性和...

    轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发chap2

    第三部分示范开发了一个包含7个表,表之间具有复杂的关联映射、继承映射等关系,且业务也相对复杂的工作流案例,让读者理论联系实际,将三个框架真正运用到实际开发中去。该案例采用目前最流行、最规范的Java EE架构...

    低清版 大型门户网站是这样炼成的.pdf

    4.3.11 映射继承关系 260 4.3.12 hibernate的集合映射 266 4.4 小结 270 第5章 hibernate 3持久化技术实践与性能优化 271 5.1 操作持久化对象的常用方法介绍 271 5.1.1 使用session的begintransaction()方法 ...

    java从入门到精通70个PPT

    43 Hibernate 关联映射 44 HQL实用技术 45 HQL高级 46 Criteria 查询 47-49 项目实战 影院信息查询系统 50 pl/sql 51 Oracle数据库对象 52 提高数据库性能 53 hibernate总结 54 使用Spring容器管理JavaBean 55 ...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和...

    spring chm文档

    3.3.3. bean属性及构造器参数详解 3.3.4. 使用depends-on 3.3.5. 延迟初始化bean 3.3.6. 自动装配(autowire)协作者 3.3.7. 依赖检查 3.3.8. 方法注入 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.3.3. bean属性及构造器参数详解 3.3.3.1. 直接量(基本类型、Strings类型等。) 3.3.3.2. 引用其它的bean(协作者) 3.3.3.3. 内部bean 3.3.3.4. 集合 3.3.3.5. Nulls 3.3.3.6. XML-based configuration metadata ...

    Spring中文帮助文档

    9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知事务操作 9.5.9. 结合AspectJ使用 @Transactional 9.6. 编程式事务管理 9.6.1. 使用TransactionTemplate 9.6.2. ...

Global site tag (gtag.js) - Google Analytics