`
younglibin
  • 浏览: 1210956 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate继承映射

阅读更多

A、采用subclass元素的继承映射:

    采用这种方式,整个继承继承树的所有实例都将保存在同一个表内,因为将父子类的实例全部保存在同一个表内,需要在该表中额外增加一列:使用该列来区分每一行记录到底是哪个类的实例——这个列被称为辨别者

使用subclass来映射子持久化类,使用discriminator元素类映射辨者列,每个类映射中都需要指定辨别列的值!

 eg:
Preson.hbm.xml:

  <!-- 映射Person类 -->
 <class name="Person" discriminator-value="普通人">
  <!-- 映射标识属性 -->
  <id name="id" column="person_id">
   <!-- 使用identity的主键生成器策略 -->
   <generator class="identity"/>
  </id>
  <!-- 映射辨别者列 -->
  <discriminator column="wawa" type="string"/>
  <!-- 如下映射两个基本属性 -->
  <property name="name" length="80"/>
  <property name="gender"/>
        <!-- 下面映射了一个组件属性 -->
  <component name="address">
   <!-- 映射组件属性的三个基本属性 -->
   <property name="detail"/>
   <property name="zip"/>
   <property name="country"/>
  </component>
  <!-- 使用subclass元素映射Person类的子类Employee -->
  <subclass name="Employee" discriminator-value="雇员">
   <!-- 映射两个基本属性 -->
   <property name="title" />
   <property name="salary" />
   <!-- 映射N-1的关联映射 -->
   <many-to-one name="manager" column="manager_id"/>
   <!-- 映射与Customer类之间的1:N关联 -->
   <set name="customers" inverse="true">
    <key column="empoyee_id"/>
    <one-to-many class="Customer"/>
   </set>
   <!-- 使用subclass元素映射Employee类的子类Manager -->
   <subclass name="Manager" discriminator-value="经理">
    <!-- 映射Manager类的基本属性department -->
    <property name="department"/>
    <!-- 映射Manager类的关联实体:Employee -->
    <set name="employees" inverse="true">
     <key column="manager_id"/>
     <one-to-many class="Employee"/>
    </set>
   </subclass>
  </subclass>
  <!-- 使用subclass映射Person的Customer子类 -->
  <subclass name="Customer" discriminator-value="顾客">
   <!-- 映射Customer类的comments属性 -->
   <property name="comments"/>
   <!-- 映射Customer和Employee的关联关系 -->
   <many-to-one name="employee" column="empoyee_id"/>
  </subclass>
 </class>
 

B、采用joined-subclass元素的继承映射:

 

 采用这种方式,父类实例保存在父类列表里,而子类实例则有父类表和子类表共同存储;

用于将子类和父类共有的属性保存在父类表中,而在子类增加的属性,则保存在子类表中;

 

必须使用key元素映射父子类的共有主键这些共有主键列的列名不必相同;

eg:

Preson.hbm.xml

 

<!-- 映射Person类 --> 
 <class name="Person">
  <!-- 映射标识属性 -->
  <id name="id" column="person_id">
   <!-- 使用identity的主键生成器策略 -->
   <generator class="identity"/>
  </id>
  <!-- 如下映射两个基本属性 -->
  <property name="name" length="80"/>
  <property name="gender"/>
        <!-- 下面映射了一个组件属性 -->
  <component name="address">
   <!-- 映射组件属性的三个基本属性 -->
   <property name="detail"/>
   <property name="zip"/>
   <property name="country"/>
  </component>
  <!-- 使用joined-subclass元素映射Person类的Employee子类 -->
  <joined-subclass name="Employee">
   <!-- 必须使用key元素映射父子类的共有主键 -->
   <key column="person_id"/>
   <!-- 映射Employee类的两个普通属性 -->
   <property name="title" not-null="true"/>
   <property name="salary" not-null="true"/>
   <!-- 映射Employee类与Manager类之间的N-1关联-->
   <many-to-one name="manager" column="manager_id"/>
   <!-- 映射Employee类与Customer类之间的1-N关联-->
   <set name="customers" inverse="true">
    <key column="empoyee_id"/>
    <one-to-many class="Customer"/>
   </set>

   <!-- 使用joined-subclass元素映射Employee类的Manager子类 -->
   <joined-subclass name="Manager">
    <!-- 必须使用key元素映射父子类的共有主键 -->
    <key column="person_id"/>
    <!-- 映射Manager类的department属性 -->
    <property name="department"/>
    <!-- 映射Employee类与Manager类之间的1-N关联-->
    <set name="employees" inverse="true">
     <key column="manager_id"/>
     <one-to-many class="Employee"/>
    </set>
   </joined-subclass>
  </joined-subclass>

  <!-- 使用joined-subclass元素映射Person类的Customer子类 -->
  <joined-subclass name="Customer">
   <!-- 必须使用key元素映射父子类的共有主键 -->
   <key column="person_id"/>
   <property name="comments" not-null="true"/>
   <!-- 映射Employee类与Customer类之间的1-N关联-->
   <many-to-one name="employee" column="empoyee_id" not-null="true"/>

  </joined-subclass>

 </class>

 

C、采用union-subclass元素的继承映射:

 

<!-- 映射Person类 --> 
 <class name="Person">
  <!-- 映射标识属性 -->
  <id name="id" column="person_id">
   <!-- 使用identity的主键生成器策略 -->
   <generator class="increment"/>
  </id>
  <!-- 如下映射两个基本属性 -->
  <property name="name" length="80"/>
  <property name="gender"/>
        <!-- 下面映射了一个组件属性 -->
  <component name="address">
   <!-- 映射组件属性的三个基本属性 -->
   <property name="detail"/>
   <property name="zip"/>
   <property name="country"/>
  </component>
  <!-- 使用union-subclass元素映射Person类的Employee子类 -->
  <union-subclass name="Employee">
   <!-- 映射Employee类的两个普通属性 -->
   <property name="title" not-null="true"/>
   <property name="salary" not-null="true"/>
   <!-- 映射Employee类与Manager类之间的N-1关联-->
   <many-to-one name="manager" column="manager_id"/>
   <!-- 映射Employee类与Customer类之间的1-N关联-->
   <set name="customers" inverse="true">
    <key column="empoyee_id"/>
    <one-to-many class="Customer"/>
   </set>
   <!-- 使用union -subclass元素映射Employee类的Manager子类 -->
   <union-subclass name="Manager">
    <!-- 映射Manager类的department属性 -->
    <property name="department"/>
    <!-- 映射Employee类与Manager类之间的1-N关联-->
    <set name="employees" inverse="true">
     <key column="manager_id"/>
     <one-to-many class="Employee"/>
    </set>

   </union-subclass>
  </union-subclass>

  <!-- 使用union -subclass元素映射Person类的Customer子类 -->
  <union-subclass name="Customer">
   <!-- 映射Customer的普通属性 -->
   <property name="comments" not-null="true"/>
   <!-- 映射Employee类与Customer类之间的1-N关联-->
   <many-to-one name="employee" column="empoyee_id"
    not-null="true"/>

  </union-subclass>
 </class>

1
0
分享到:
评论

相关推荐

    Hibernate继承映射代码

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

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

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

    hibernate继承映射.rar

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

    Hibernate继承映射(annotation)

    **标题:“Hibernate继承映射(Annotation)详解”** 在Java持久化框架Hibernate中,继承映射是一种关键特性,它允许开发者将对象模型的继承结构映射到数据库的表结构。在传统的面向对象编程中,继承是实现代码复用和...

    Hibernate继承映射-概述

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

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

    本篇文章将详细探讨Hibernate继承映射的策略,特别是“每个具体类一张表”(Table Per Concrete Class)的映射方式。 在面向对象编程中,继承是常见的代码复用手段,但在关系型数据库中,这种概念并不直接对应。...

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

    本文将详细探讨“Hibernate继承映射的第一种策略:每个类对应一张表”的概念、实现方式以及其优缺点。 首先,我们需要理解Hibernate继承映射的基本策略。在面向对象编程中,类继承是常见的代码复用手段,但在数据库...

    Hibernate继承映射

    【Hibernate继承映射】是Java开发中使用Hibernate框架进行数据持久化时的一种重要技术,它允许我们将复杂的对象模型映射到数据库的表结构上。在实际项目中,我们经常遇到对象之间的继承关系,如抽象类和子类。...

    hibernate继承映射教学

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

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

    本篇主要探讨的是Hibernate中的继承映射策略,特别是“每个子类一张表”(Table per subclass)的方式。这种方式也被称为单表继承或多表继承,是Hibernate支持的四种继承映射策略之一。了解并熟练掌握这种映射模式...

    用Hibernate映射继承关系

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

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

    本篇文章主要探讨的是Hibernate的继承映射策略,特别是“每个类分层结构一张表”(Table per Concrete Class)的方式。这种映射策略是Hibernate提供的多种继承映射方案之一,适用于处理复杂的对象模型。 首先,我们...

    Hibernate教程17_继承映射

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

Global site tag (gtag.js) - Google Analytics