`
KuangYeYaZi
  • 浏览: 55878 次
文章分类
社区版块
存档分类
最新评论

Hibernate关系映射之关联映射

 
阅读更多

Hibernate关系映射

    1.关联映射

    概念:关联映射,就是将关联关系映射到数据库中,所谓的关联关系,在对象模型中,就是一个或多个引用

    分类:

    (1)多对一关联映射

    many-to-one

    多对一关联映射原理:在多的一端加入一个外键,指向一的一端

    在多的一端采用如下标签映射:

    

<many-to-one name="group" column="groupId"/>

 

    (2)一对一关联映射

    one-to-one

    A主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系;数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联

    示例1:

    hibernate一对一主键关联映射(单向关联Person--->IdCard)

    一对一关联映射原理:让两个实体的主键一样,这样就不需要加入多余的字段了(扩展性不好)

    

<class name="com.ys.hibernate.Person" table="t_person">
    <id name="id">
    <!-- 采用foreign生成策略,会取得关联对象的标识 -->
    <generator class="foreign">
    <!-- property指关联对象 -->
    <param name="property">idCard</param>
    </generator>
    </id>
    <property name="name" />
    <!--
    one-to-one指示hibernate如何加载其关联对象,默认根据主键加载
    也就是拿到关系字段值,根据对端的主键来加载关联对象
    constrained="true"表示,当前主键(Person的主键)还是一个外键
    参照了对端的主键(IdCard的主键),也就是会生成外键约束语句
    -->
    <one-to-one name="idCard" constrained="true" />
</class>

 

    示例2:

    hibernate一对一主键关联映射(双向关联Person<--->IdCard)

    需要在IdCard加入<one-to-one>标签,

    指示hibernate将关联对象Person根据主键加载上来

    <one-to-one>不影响存储,只影响加载

    <one-to-one>标签fetch属性默认为"join".

    B唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系

    示例1:

    hibernate一对一唯一外键关联映射(单向关联Person--->IdCard)

    一对一唯一外键关联映射,其实是多对一的特例

    采用<many-to-one>标签来映射,指定多的一端unique为true,

    这样就限制了多的一端的多重性为一,就是这样来映射的。

    

<many-to-one name="idCard" unique="true"/>

 

示例2:

    hibernate一对一唯一外键关联映射(双向关联Person<--->IdCard)

    一对一唯一外键关联双向,采用<one-to-one>标签映射,

    必须指定<one-to-one>标签中的property-ref属性为关系字段的名称

   

 <one-to-one name="person" property-ref="idCard"/>

 

    (3)一对多关联映射

    one-to-many

    示例1:

    hibernate一对多关联映射(单向Classes--->Student)

    一对多和多对一的映射原理是一样的,都是在多的一端加入一个外键指向一的一端

    它们的区别在于维护的关系不同:

    *多对一维护的关系:多指向一的关系,如果维护了多指向一的关系,那么加载多的时候会把一加载上来

    *一对多维护的关系:一指向多的关系,如果维护了一指向多的关系,那么加载一的时候会把多加载上来

    在一的一端维护关系存在缺陷:

    *因为多的一端Student不知道Classes的存在(也就是Student没有维护与Classes的关系)

    所以在保存Student的时候关系字段classesId是为null的,如果将该字段设置为非空,则将无法保存数据

    *另外因为Student不维护关系,而Classes维护关系,Classes就会发出多余的update语句,保证Classes和Student有关系,这样加载Classes的时候才能把该Classes对应的学生集合加载上

    

<set name="students">
    <!--
    <key column="classesId" not-null="true"/>--保存不成功
    -->
    <key column="classesId" />--会发出多余的update语句来维持关系
    <one-to-many class="com.ys.hibernate.Student" />
</set>

 

    示例2:

    hibernate一对多关联映射(双向Classes<--->Student)

    采用一对多双向关联映射的目的主要是为了解决一对多单向关联的缺陷

    而不是需求驱动的

    一对多双向关联的映射方式:

    *在一的一端的集合上采用<key>标签,在多的一端加入一个外键

    *在多的一端采用<many-to-one>标签

   

 <many-to-one name="classes" column="classesId" />

 

    !!!注意:

    <key>标签和<many-to-one>标签加入的字段保持一致,否则会产生数据混乱

    (4)多对多关联映射

    many-to-many

    示例1:

    hibernate多对多关联映射(单向User--->Role)

    具体映射:

    

<set name="roles" table="t_user_role">
    <key column="user_id" />
    <many-to-many class="com.ys.hibernate.Role" column="role_id" />
</set>

 

    把第三张表也抽取出一个类出来,使用两个many-to-one来完成

    示例2:

    hibernate多对多关联映射(双向User<--->Role)

    具体映射:

    

<set name="roles" table="t_user_role">
    <key column="user_id" />
    <many-to-many class="com.ys.hibernate.Role" column="role_id" />
 </set>

 

    需要注意:

    *生成的中间表名称必须一样

    *生成的中间表中的字段必须一样

 

come from:http://itlab.idcquan.com/Java/core/911505_2.html

分享到:
评论

相关推荐

    Hibernate集合映射与关联关系

    本主题将深入探讨Hibernate集合映射与关联关系,包括"student与Score的Map集合关系"、"student与class的多对一"以及"一对多映射"的概念。 首先,让我们理解一下Hibernate中的集合映射。在关系型数据库中,一个实体...

    hibernate关联映射详解

    hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的关联关系,...

    hibernate关联映射实例

    本文将深入探讨“hibernate关联映射实例”中的关键知识点,包括一对多、多对多和继承映射,这些都是Hibernate中至关重要的概念。 1. **一对多关联映射**: 在现实世界中,一个实体可能会与多个其他实体相关联,...

    Hibernate的关联关系映射图解

    Hibernate4中映射关系图解。

    Hibernate_关联关系映射配置详解

    Hibernate_关联关系映射配置详解,希望能帮助广大java爱好者

    hibernate多对多关联映射

    总之,Hibernate的多对多关联映射是解决复杂关系数据库设计的关键技术之一。通过合理的配置和使用,开发者可以轻松管理实体之间的多对多关系,提高开发效率。理解并熟练掌握这部分知识对于提升Java企业级应用开发...

    hibernate关联映射的作用和常用属性解释

    其中,“关联映射”是Hibernate中的一个重要概念,用于处理实体之间的关联关系,例如一对一、一对多、多对一以及多对多等。 #### 常用属性解析 为了更好地理解和运用Hibernate中的关联映射机制,我们需要深入了解...

    Hibernate关系映射

    "多对一"关系映射是Hibernate支持的四种基本关联类型之一,包括一对一、一对多、多对一和多对多。本篇将深入探讨“多对一”关系映射的概念、配置以及在实际web系统中的应用。 **一、“多对一”关系映射概念** 在...

    Hibernate 关联关系映射分类

    在深入探讨Hibernate关联关系映射分类之前,我们首先简要回顾一下Hibernate框架的基本概念。Hibernate是一种持久层框架,主要用于Java应用程序中的对象关系映射(ORM),它能够将面向对象的数据模型转换为数据库中的...

    hibernate实体关联关系映射

    其中,实体关联关系映射是Hibernate的核心特性之一,对于实现复杂的业务逻辑至关重要。 本文旨在深入探讨Hibernate中的实体关联关系映射技术,主要包括一对一、一对多、多对多等不同类型的关联关系及其在实际开发中...

    hibernate的关联关系映射

    【hibernate的关联关系映射】在Java持久化框架Hibernate中,关联关系映射是核心功能之一,它允许对象间的复杂关系与数据库中的表结构相匹配。在选课系统这个例子中,主要涉及到的对象包括课题(Course)、教师(Teacher...

    hibernate一对多关联映射(单向关联)

    在Java的持久化框架Hibernate中,一对多关联映射是一种常见的关系映射方式,它用于表示一个实体(如用户)可以拥有多个关联实体(如订单)。在这个场景中,"一"通常代表父实体,"多"代表子实体。这篇博客文章...

    Hibernate映射一对多关联关系

    ### Hibernate映射一对多关联关系 #### 知识点概览 - **概念解析**:一对多(One-to-Many)关联关系的概念及其在Hibernate中的实现方式。 - **域模型设计**:创建具有一个实体与多个实体关联的域模型。 - **关系...

    hibernate关联关系映射

    "hibernate关联关系映射"是Hibernate的核心概念之一,它定义了如何在Java对象和数据库表之间建立关系。以下是对这个主题的详细讲解: 一、一对一关系映射(One-to-One) 一对一关系是指一个实体对应另一个实体的...

    Hibernate_关联关系映射配置

    理解并熟练掌握Hibernate中的关联关系映射配置是每个Java开发者必备的技能之一。通过正确的注解和配置,我们可以轻松地在对象和数据库表之间建立对应关系,实现数据的高效存取。这不仅简化了代码,还提高了开发效率...

    Hibernate关联映射

    在 Hibernate 映射中,需要使用 `one-to-one` 元素,并设置 `constrained="true"`,表明该类的主键由关联类生成。 3. Hibernate 一对一连接表单向关联: 这种关联方式是通过额外的连接表来实现一对一关系的。连接...

    Hibernate3.x关联映射示例

    关联映射是Hibernate中的核心概念之一,它允许我们将数据库中的表关系映射到对象之间的关系。主要的关联类型有以下几种: 1. **一对一(One-to-One)关联**:一个实体对应另一个实体的唯一实例。在数据库中,通常...

    hibernate关系映射网址

    ### Hibernate关系映射详解 #### 一、引言 Hibernate是一种广泛使用的Java持久化框架,它简化了对象关系映射(Object-Relational Mapping,简称ORM)的过程,使得开发人员可以更加专注于业务逻辑的实现而无需过多...

Global site tag (gtag.js) - Google Analytics