`

17 继承(四)每一个具体的类 映射到一张表

阅读更多

类(Person)  , 男人(Men)继承"人"类, 女人(Women)继承"人"类,  UML如下:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

映射到三张表 , 每一个具体的类 映射到一张表,继承映射要求父子类的主键不能重复


t_person表 :

1 int  id                             //主键

2 varchar  name                 //父类中的姓名

3 int  age                          //父类中的年龄      

 

t_men表 :

1 int  id                             //主键

2 varchar  name                 //父类中的姓名

3 int  age

4 varchar   a                      //"男人"类扩展的属性

 

t_women表 :

1 int  id                             //主键

2 varchar  name                 //父类中的姓名

3 int  age

 

4 varchar   b                      //"女人"类 扩展的 属性     




Person, Men, Women 三个类这里就不显示了,但简单, 想看了附件中有源码

 

 

Person.hbm.xml 如下:

 

<?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 
	package="extends_test.extends_4" auto-import="false">

	<class name="Person" table="t_person4" >
		<!-- 父类的属性 -->		
		<id name="id">
			<!-- 重点 -->
			<!-- 不能用这种主键生成器 generator class="native" -->
			<!-- class="native" 主键是自增长的, 父子类的主键会重复,但继承映射要求不能重复 -->
			<!-- 高低位生 主键生成器 -->
			<generator class="hilo"/>
		</id>		
				
		<property name="name"/><!-- 父类的属性 -->		
		<property name="age"/><!-- 父类的属性 -->	
		
		<!-- Mem子类的映射 -->
		<union-subclass name="Men" table="t_men4">
			<!-- Men类专有的属性a -->
			<property name="a"/>
		</union-subclass>		
		
		<!-- Women子类的映射 -->
		<union-subclass name="Women" table="t_women4">
			<!-- Men类专有的属性a -->
			<property name="b"/>		
		</union-subclass>

	</class>	
</hibernate-mapping>
 

 

保存与查询操作:  略... 见14,15讲

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    14 继承(一)(整个继承树映射到一张表)

    所有的继承类数据存储在一个表中,包括父类和所有子类的属性。 3. **类型标识符(Discriminator Value)**:在表中,通常会有一个字段用来作为子类的标识,称为类型标识符或鉴别器。比如,如果有一个`Animal`类和两...

    hibernate映射继承关系(每个类都对应一张表)

    在"每个类都对应一张表"的映射中,每个类(包括基类和所有子类)都会在数据库中被映射为一张独立的表。这种方式也被称为"Table per Class"或"Class Table Inheritance"。每个类的实例会被存储在对应的表中,而共享的...

    Hibernate继承映射一:每个类分层结构一张表

    Hibernate提供了四种主要的继承映射策略:单表策略、每个类分层结构一张表、表集策略以及联合主键策略。本文主要关注的是“每个类分层结构一张表”。 在“每个类分层结构一张表”策略中,每种具体类(Concrete ...

    Hibernate继承映射的第一种策略:每个具体类一张表

    - **继承层次**:当实体类构成一个继承层次时,Hibernate需要决定如何将这些类映射到数据库中的一组表。 2. **每个具体类一张表策略** - **策略解释**:每一种具体类都会对应数据库中的一个独立表,而父类的属性...

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

    本篇将详细介绍Hibernate继承映射的第一种策略——每棵类继承树对应一张表,即单一表继承策略。 ### 单一表继承策略 在单一表继承策略中,所有类层次结构中的实例都存储在同一张数据库表中。这种策略通过在表中...

    Hibernate继承映射二:每个子类一张表

    总结来说,“每个子类一张表”的继承映射策略是Hibernate提供的一种处理继承关系的方法,它将类的继承结构映射到数据库的多个表中。这种策略适合于子类具有大量特有属性的情况,但需要权衡可能带来的数据库设计复杂...

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

    在这一策略下,每个类都会被映射到数据库中的一个单独表,父类的属性会出现在所有子类的表中,而子类特有的属性则只存在于对应的子类表中。这种方式的优点在于可以清晰地将数据分离,避免了单表策略可能导致的数据...

    hibernate的继承映射关系

    这是最直接且简单的映射方式,每个具体类(即非抽象类)直接映射到数据库中的一张表。以图14-2为例,HourlyEmployee类和SalariedEmployee类分别对应数据库中的HOURLY_EMPLOYEES表和SALARIED_EMPLOYEES表。每个表中...

    Hibernate继承映射

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

    将对象映射到关系数据库详解

    每个具体类映射到单独的一张表则提供了更好的灵活性和性能,但可能导致更多的表和更复杂的管理。 #### 六、映射对象关系 除了单个对象的映射外,还需要考虑对象之间的关系映射,包括一对一、一对多和多对多等不同...

    用Hibernate映射继承关系

    本主题聚焦于“用Hibernate映射继承关系”,我们将深入探讨Hibernate如何处理对象的继承层次结构,并将其映射到数据库中的表。 Hibernate支持多种继承策略,包括单一表继承(Single Table Inheritance)、联合表...

    hibernate继承映射.rar

    单表继承是最简单的一种策略,所有继承类的数据都存储在同一个表中。通过一个特定的字段(通常是discriminator列)来区分不同的子类。例如,在Hibernate-lab2中,如果我们有一个基类`Person`和两个子类`Student`和`...

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

    10.1.5. 每个具体类一张表(Table per concrete class) 每个具体类(非抽象类)都有自己的表,不包括抽象类。这种方式避免了鉴别器字段,但同样可能导致大量小表。 10.1.6. 每个具体类一张表,使用隐式多态 与上一...

    Hibernate继承关系映射.pdf

    单表映射策略将继承树中的所有类映射到同一张表中,通过一个额外的“识别字段”(通常称为`discriminator`)来区分不同类型的子类记录。 #### 示例代码 ```xml &lt;!-- 其他属性映射省略 --&gt; &lt;!-- Notepad...

Global site tag (gtag.js) - Google Analytics