`

Hibernate 关联关系

阅读更多

1.一对多的单向关联关系

    配置单向的一对多关系是从"一"这一方开始的.通过one-to-many来实现.由于在一对多的关系中,需要在一方持有多方的对象,因此需通过set或 bag来实现.

如:一个教师可拥有多名学生:

教师配置文件如下:

   <?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>
  <class name="hibernate.ch08.Teacher" table="teacher" lazy="false">
     <id name="id" type="integer">
     <column name="id"></column>
     <generator class="identity"></generator>
     </id>
     <property name="teacherName" type="string"></property>
     <set name="students"  fetch="select" cascade="save-update" lazy="false">
     <key column="teacher_id"></key>
     <one-to-many class="hibernate.ch08.Student"/>
     <!-- inverse="true" 此属性用来更新速度,表示在执行主表teacher的更新时不更新从表student的值,如果改为false或去掉,就会更新.
        这就是我们常见的student表中teacher_id值为空的情况
       -->
     </set>
  </class>
</hibernate-mapping>

 

学生配置如下:

<?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 >
  <class name="hibernate.ch08.Student" table="student" lazy="false">
    <id name="id" type="integer">
    <column name="id"></column>
    <generator class="identity"></generator>
    </id>
     <property name="studentName" type="string"></property>
    </class>
</hibernate-mapping>

虽然这种单向操作可以满足日常需要,但也存在问题,在保存被控对象时,需要先插入空值到被关联的字段中,(如果数据库建立非空约束,将会导致失败),然后再进行更新操作.这样将一个操作分两步,降低效率.

 

2.多对一关联

多对一是一对多的反向,在实际中为了避免只配置一对多的关联关系时所遇到的问题.通常会将一对多的关联配置为双向的.同时将关联关系的主控方设置为"多"的一方.这样就可避免上述问题.

对于多对一的关联需要在多的一方配置many-to-one

<many-to-one mane="user" class="User" column="user_id"/>

另外为了使多的一方为主控方,需要在一的一方设置inverse="true"的配置(set里设置)

 

 

 

3.多对多关联

多对多关联需要借助于中间表来实现.通过中间表,将这两个表之间的多对多的关联关系转换成它们分别与中间表的一对多关联关系.那么对于Hibernate不需要中间对象来实现这种转换,但是中间表还是需要建立的.

 

多对多的关系是通过many-to-many进行配置的,同样是由于在一方需要持有另一方对象的集合,所以集合对象是不可少的.

<set name="roles"

       cascade="save-update"

      inverse="false"

      table="user_role">

 <many-to-many class="Role" column="role_id"/>

</set>

 

<set name="rsers"

       cascade="save-update"

      inverse="true"

      table="user_role">

 <many-to-many class="User" column="user_id"/>

</set>

 

在这里仍需要配置inverse,根据需要来确定主控方.

分享到:
评论

相关推荐

    Hibernate关联关系

    ### Hibernate关联关系详解 在Java开发领域中,Hibernate作为一个强大的对象关系映射(ORM)框架,为开发者提供了方便地操作数据库的方式。通过将Java对象与数据库表进行映射,Hibernate大大简化了数据持久化层的...

    全面解读hibernate关联关系

    hibernate关联关系详解 在Java Persistence API (JPA) 和 Hibernate 框架中,实体之间的关联关系是数据模型的重要组成部分。关联关系允许我们定义不同实体类之间的联系,如一对一、一对多、多对一和多对多。本文将...

    hibernate关联关系总结

    Hibernate关联关系是Java持久化框架Hibernate中的核心概念,它允许我们在数据库中建立对象之间的关系映射,以便在程序中操作对象时,可以自动处理与数据库的交互。本篇将深入探讨Hibernate的四种主要关联关系:一对...

    Hibernate 关联关系解除

    一、Hibernate关联关系介绍 在Hibernate中,关联关系主要包括以下几种: 1. 一对一(OneToOne):一个实体对应另一个实体的唯一实例。 2. 一对多(OneToMany):一个实体可以与多个其他实体相关联。 3. 多对一...

    Hibernate 关联关系映射分类

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

    Hibernate关联关系练习【全】

    总之,Hibernate关联关系是理解其工作原理的关键,它使得Java对象和数据库记录之间的映射变得简单。通过练习,你可以掌握如何配置和使用这些关系,以及如何进行相关的查询操作,从而提升你的开发效率和代码质量。...

    hibernate关联关系实例

    在这个“hibernate关联关系实例”中,我们将深入探讨四种基本的关联关系:一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)以及多对多(Many-to-Many),同时也会涉及Hibernate查询语言(HQL)...

    hibernate关联关系2

    在本项目中,"hibernate关联关系2"是一个关于使用Hibernate框架处理数据库关联关系的实战案例。Hibernate是一个流行的开源对象关系映射(ORM)工具,它允许开发人员使用Java对象来操作数据库,极大地简化了数据库...

    Hibernate关联关系映射目录

    ### Hibernate关联关系映射 #### 一、单向关联 单向关联指的是对象之间的关联关系只在一个方向上存在,也就是说这种关联关系仅在一个类中表示出来,在另一个类中不体现这种关联。 ##### 1. 一对一外键单向关联 ...

    hibernate关联关系映射

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

    Hibernate关联关系配置

    ### Hibernate关联关系配置详解 #### 一、一对多与多对一关系配置 在软件开发过程中,实体之间的关联关系是常见的需求之一。其中,“一对多”与“多对一”的关系尤为常见,这类关系通常用来表示实体之间的层级或...

    Hibernate关联关系疑问

    这篇博客"Hibernate关联关系疑问"可能探讨了在使用Hibernate处理对象关系映射(ORM)时遇到的一些关联问题。在ORM中,关联关系是数据库表之间的连接,如一对一、一对多、多对一和多对多关系。 1. **一对一关联...

    Hibernate关联关系映射.CHM

    Hibernate关联关系映射.CHM Hibernate文档相关

    hibernate关联关系之一对一双向关联

    这种关联关系可以是单向的,也可以是双向的,而这里的"hibernate关联关系之一对一双向关联"着重讨论的是后者。双向关联意味着两个实体类都可以直接访问对方,提供了更方便的数据操作。 在Hibernate中,一对一双向...

    Hibernate关联关系映射实例速查

    Hibernate关联关系映射实例速查,帮助初学者学习。

    hibernate关联关系

    综上所述,本教程涵盖了Hibernate关联关系的基础知识,包括1对1、一对多和多对多的实现,以及如何在关联关系中进行增删改查操作。结合MySQL数据表文件,初学者可以更好地理解这些概念并应用于实际项目中。在实践中...

    Hibernate关联关系的CRUD和集合映射(annotation)

    ### Hibernate关联关系 关联关系是指在Java对象与数据库表之间建立的连接。主要有以下几种类型: 1. **一对一(OneToOne)**:一个实体对应表中的唯一一行数据。可以通过`@OneToOne`注解来定义,可以设置`fetch`...

    HIbernate关联关系总结

    在Java的ORM(对象关系映射)框架Hibernate中,关联关系是将数据库中的表与Java对象之间建立联系的重要机制。本篇文章将详细讲解Hibernate的两种单向关联关系:单向1-N关联和单向N-1关联。 1. **单向1-N关联** 在...

    Hibernate关联关系总结

    本篇文章将深入探讨Hibernate中的三种主要关联关系:一对一、一对多和多对多。 **一对一关联(One-to-One)** 一对一关联在现实生活中很常见,例如一个人只有一个身份证。在Hibernate中,这种关联可以通过`@...

    Hibernate关联关系.doc

    在Java持久化框架Hibernate中,关联关系映射是核心特性之一,它允许对象模型与数据库中的关系模型对应。本文将详细解析三种基本的关联关系:多对一、一对多以及一对一,以及它们在Hibernate中的配置。 1. **多对一...

Global site tag (gtag.js) - Google Analytics