类(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讲
分享到:
相关推荐
所有的继承类数据存储在一个表中,包括父类和所有子类的属性。 3. **类型标识符(Discriminator Value)**:在表中,通常会有一个字段用来作为子类的标识,称为类型标识符或鉴别器。比如,如果有一个`Animal`类和两...
在"每个类都对应一张表"的映射中,每个类(包括基类和所有子类)都会在数据库中被映射为一张独立的表。这种方式也被称为"Table per Class"或"Class Table Inheritance"。每个类的实例会被存储在对应的表中,而共享的...
Hibernate提供了四种主要的继承映射策略:单表策略、每个类分层结构一张表、表集策略以及联合主键策略。本文主要关注的是“每个类分层结构一张表”。 在“每个类分层结构一张表”策略中,每种具体类(Concrete ...
- **继承层次**:当实体类构成一个继承层次时,Hibernate需要决定如何将这些类映射到数据库中的一组表。 2. **每个具体类一张表策略** - **策略解释**:每一种具体类都会对应数据库中的一个独立表,而父类的属性...
本篇将详细介绍Hibernate继承映射的第一种策略——每棵类继承树对应一张表,即单一表继承策略。 ### 单一表继承策略 在单一表继承策略中,所有类层次结构中的实例都存储在同一张数据库表中。这种策略通过在表中...
总结来说,“每个子类一张表”的继承映射策略是Hibernate提供的一种处理继承关系的方法,它将类的继承结构映射到数据库的多个表中。这种策略适合于子类具有大量特有属性的情况,但需要权衡可能带来的数据库设计复杂...
在这一策略下,每个类都会被映射到数据库中的一个单独表,父类的属性会出现在所有子类的表中,而子类特有的属性则只存在于对应的子类表中。这种方式的优点在于可以清晰地将数据分离,避免了单表策略可能导致的数据...
这是最直接且简单的映射方式,每个具体类(即非抽象类)直接映射到数据库中的一张表。以图14-2为例,HourlyEmployee类和SalariedEmployee类分别对应数据库中的HOURLY_EMPLOYEES表和SALARIED_EMPLOYEES表。每个表中...
Hibernate的继承映射 --每个继承层次一张表 -- 每个具体类一张表 -- 每个类一张表
每个具体类映射到单独的一张表则提供了更好的灵活性和性能,但可能导致更多的表和更复杂的管理。 #### 六、映射对象关系 除了单个对象的映射外,还需要考虑对象之间的关系映射,包括一对一、一对多和多对多等不同...
本主题聚焦于“用Hibernate映射继承关系”,我们将深入探讨Hibernate如何处理对象的继承层次结构,并将其映射到数据库中的表。 Hibernate支持多种继承策略,包括单一表继承(Single Table Inheritance)、联合表...
单表继承是最简单的一种策略,所有继承类的数据都存储在同一个表中。通过一个特定的字段(通常是discriminator列)来区分不同的子类。例如,在Hibernate-lab2中,如果我们有一个基类`Person`和两个子类`Student`和`...
10.1.5. 每个具体类一张表(Table per concrete class) 每个具体类(非抽象类)都有自己的表,不包括抽象类。这种方式避免了鉴别器字段,但同样可能导致大量小表。 10.1.6. 每个具体类一张表,使用隐式多态 与上一...
单表映射策略将继承树中的所有类映射到同一张表中,通过一个额外的“识别字段”(通常称为`discriminator`)来区分不同类型的子类记录。 #### 示例代码 ```xml <!-- 其他属性映射省略 --> <!-- Notepad...