`
周一Monday
  • 浏览: 346284 次
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate4继承映射

阅读更多

Hibernate 支持三种基本的继承映射策略:

1、单表继承:每棵类继承树使用一个表
2、具体表继承:每个子类一个表
3、类表继承:每个具体类一个表(有一些限制)


三种方式的比较:
1、所有类映射成一张表会产生数据冗余(不过这是通常采用的方法)
2、每个类映射成一张表会有效率问题,比如是三层或四层结构时,对于查询或更新会发出很多sql语句
3、具体类映射成表的缺点是主键不能自增

结论:使用第一种方式

 

/** 动物 */
public class Animal {

	private Integer id;
	private String name;
	private String type;

	//getter and setter
}

 

/** 猪 */
public class Pig extends Animal {

	private Double weight;
	
	//getter and setter
}

 

/** 鸟 */
public class Bird extends Animal{

	private String color;
	
	//getter and setter
}

 

<hibernate-mapping package="org.monday.hibernate4.domain">
	<class name="Animal" table="tbl_animal">
		<id name="id">
			<generator class="identity" />
		</id>
		<!-- 辨别者列 -->
		<discriminator column="type" type="string" />
		<property name="name" />
		<!-- 子类 -->
		<subclass name="Pig" discriminator-value="p">
			<property name="weight" />
		</subclass>
		<!-- 子类 -->
		<subclass name="Bird" discriminator-value="b">
			<property name="color" />
		</subclass>
	</class>
</hibernate-mapping>

 下面是基于注解的

 

/** 动物 */
@Entity
@Table(name = "tbl_animal")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue("a")
public class Animal {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;

	private String name;

	// getter and setter
}

 

/** 猪 */
@Entity
@DiscriminatorValue("p")
public class Pig extends Animal {

	private Double weight;
	
	//getter and setter
}

 

/** 鸟 */
@Entity
@DiscriminatorValue("b")
public class Bird extends Animal {

	private String color;

	// getter and setter
}
分享到:
评论

相关推荐

    Hibernate继承映射代码

    本主题将深入探讨"Hibernate继承映射+C3P0代码"的相关知识点。 首先,让我们理解Hibernate的继承映射。在Java中,我们可以创建一个基类,然后派生出多个子类,这种设计模式在数据库中也可以被映射出来。Hibernate...

    hibernate的继承映射教学

    针对hibernate的继承映射部分做了几个测试的例子,更加直观的阐述了继承映射的几种方式以及对应的表结构方式,文件被分割成3部分 http://download.csdn.net/source/259075 http://download.csdn.net/source/259072 ...

    用Hibernate映射继承关系

    ### 用Hibernate映射继承关系 #### 14.1 继承关系树的每个具体类对应一个表 在Hibernate中映射继承关系时,一种常见的策略是将继承关系树的每个具体类映射到单独的数据库表中。这种方法称为**表/类映射**(Table/...

    Hibernate继承映射

    Hibernate的继承映射 --每个继承层次一张表 -- 每个具体类一张表 -- 每个类一张表

    Hibernate继承映射的第一种策略:每棵类继承树对应一张表

    Hibernate继承映射是将Java类的继承关系映射到数据库表的一种策略,使得对象模型的复杂性能够平滑地转化为关系数据库模型。本篇将详细介绍Hibernate继承映射的第一种策略——每棵类继承树对应一张表,即单一表继承...

    hibernate继承映射.rar

    《Hibernate继承映射详解》 Hibernate,作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作。在实际项目中,我们常常会遇到类的继承关系,而Hibernate提供了强大的支持来处理这种继承关系的...

    hibernate的继承映射关系

    ### Hibernate的继承多态映射关系详解 在软件开发领域,特别是使用面向对象编程语言如Java进行开发时,我们经常需要处理复杂的类继承关系。在ORM(Object-Relational Mapping)框架如Hibernate中,如何优雅地将这些...

    Hibernate继承关系映射.pdf

    标题:“Hibernate继承关系映射.pdf” 描述:“简明扼要地介绍了Hibernate中继承关系的映射方式,深入探讨了三种不同的映射策略及其优缺点,同时解析了多态查询的概念。” 知识点: ### Hibernate继承关系映射...

    hibernate继承映射教学

    针对hibernate的继承映射部分做了几个测试的例子,更加直观的阐述了继承映射的几种方式以及对应的表结构方式,文件被分割成3部分 http://download.csdn.net/source/259075 http://download.csdn.net/source/259072 ...

    hibernate的继承映射(InheritanceMapping)[文].pdf

    10.1. Hibernate继承映射的三种基本策略: 10.1.1. 每个类分层结构一张表(Table per class hierarchy) 这种策略将整个类继承树的所有实例存储在一张表中。表中包含所有子类的属性,通过一个鉴别器(discriminator...

    Hibernate继承映射-概述

    《Hibernate继承映射详解》 在Java开发中,对象关系映射(ORM)框架如Hibernate大大简化了数据库操作。Hibernate不仅提供了对基本数据类型的映射,还支持复杂的数据结构,如继承关系的映射。本篇文章将深入探讨...

    Hibernate继承映射(annotation)

    【标题】:“Hibernate继承映射(annotation)” 在Java对象关系映射(ORM)框架中,Hibernate是一个非常重要的工具,它允许开发人员将Java类映射到数据库表,从而简化了数据库操作。本主题主要探讨的是Hibernate中的...

    Hibernate教程17_继承映射

    在Java世界中,ORM(对象关系映射)框架如Hibernate极大地简化了数据库操作。本教程主要探讨的是Hibernate中的“继承映射...学习并实践这些例子,有助于巩固对Hibernate继承映射的理解,并提升在实际项目中的应用能力。

    hibernate 映射继承 demo

    现在,我们开始创建一个简单的Hibernate继承映射示例。假设我们有一个基类`Person`,两个子类`Student`和`Teacher`。在Java代码中,我们需要定义这些类并添加相应的注解: ```java @Entity @Inheritance(strategy =...

Global site tag (gtag.js) - Google Analytics