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>
分享到:
相关推荐
Hibernate关联关系是Java持久化框架Hibernate中的核心概念,它允许我们在数据库中建立对象之间的关系映射,以便在程序中操作对象时,可以自动处理与数据库的交互。本篇将深入探讨Hibernate的四种主要关联关系:一对...
本篇文章将深入探讨Hibernate中的三种主要关联关系:一对一、一对多和多对多。 **一对一关联(One-to-One)** 一对一关联在现实生活中很常见,例如一个人只有一个身份证。在Hibernate中,这种关联可以通过`@...
在Java的ORM(对象关系映射)框架Hibernate中,关联关系是将数据库中的表与Java对象之间建立联系的重要机制。本篇文章将详细讲解Hibernate的两种单向关联关系:单向1-N关联和单向N-1关联。 1. **单向1-N关联** 在...
一、Hibernate关联关系介绍 在Hibernate中,关联关系主要包括以下几种: 1. 一对一(OneToOne):一个实体对应另一个实体的唯一实例。 2. 一对多(OneToMany):一个实体可以与多个其他实体相关联。 3. 多对一...
hibernate开发的关系: one-to-one,many-to-one,many-to-many学习经验总结
总结,"hibernate关联关系2"项目旨在帮助开发者理解和掌握如何在实际应用中利用Hibernate处理数据库的一对多关联。通过这个项目,不仅可以深化对Hibernate ORM的理解,还能增强数据库操作的实践经验。
对Hibernate映射关系详细总结,可以帮助你学习Hibernate知识
"hibernate关联关系映射"是Hibernate的核心概念之一,它定义了如何在Java对象和数据库表之间建立关系。以下是对这个主题的详细讲解: 一、一对一关系映射(One-to-One) 一对一关系是指一个实体对应另一个实体的...
### Hibernate关联关系映射 #### 一、单向关联 单向关联指的是对象之间的关联关系只在一个方向上存在,也就是说这种关联关系仅在一个类中表示出来,在另一个类中不体现这种关联。 ##### 1. 一对一外键单向关联 ...
总结来说,Hibernate的关联关系配置涵盖了从一对一到多对多的各种情况,提供了丰富的选项来满足不同业务需求。理解并熟练掌握这些关联关系及其配置,能帮助开发者更高效地进行数据操作,提升开发效率。在实际应用中...
### Hibernate关联关系详解 在开发基于数据库的应用程序时,实体之间的关联关系是非常常见的。Hibernate作为一款优秀的ORM(Object-Relational Mapping)框架,为Java开发者提供了便捷的方式来处理这些关系。本文将...
总结来说,Hibernate的关联关系映射允许开发者灵活地处理对象之间的复杂关系,通过配置文件映射到数据库表结构。无论是一对一还是多对一/一对多,都可以根据业务需求选择合适的关联类型,并通过Java代码和XML配置...
### Hibernate知识点总结 #### 一、Hibernate概述 Hibernate是一个开源的ORM(Object Relational Mapping,对象关系映射)框架,用于Java应用与关系型数据库之间的交互。它通过使用描述对象和数据库之间映射的元...
这种关联关系可以是单向的,也可以是双向的,而这里的"hibernate关联关系之一对一双向关联"着重讨论的是后者。双向关联意味着两个实体类都可以直接访问对方,提供了更方便的数据操作。 在Hibernate中,一对一双向...
本教程将详细讲解Hibernate中的关联关系映射配置,帮助你理解和掌握如何在Hibernate中设置不同类型的关联。 一、一对一(One-to-One)关联 在现实世界中,两个实体之间可能存在一对一的关系,例如一个人只有一个...
###Hibernate实体关联关系映射知识总结 #### 映射关系的类型 1. **一对一关联**: - **一对一外键关联**:一个实体的外键指向另一个实体的主键。 - **一对一主键关联**:两个实体共享同一个主键。 - **一对一...
总结来说,使用Hibernate映射一对多关联关系涉及到实体类的设计、数据库关系模型的构建以及映射文件的编写等多个方面。正确地实现这些步骤可以帮助我们高效地管理和操作数据,提高应用程序的性能和可维护性。