`

Hibernate映射文件之双向关联关系映射

 
阅读更多

一、双向1-N关联

Person.java

public class Person {
	private Integer id;
	private String name;
	private Integer age;
	private Set<Address> addresses = new HashSet<Address>();

        //省略setter和getter方法
}

 Address.java

public class Address implements Serializable {
	private Integer id;
	private String country;
	private String province;
	private String city;
	private Person person;

        //省略setter和getter方法
}

 

1、基于外键的双向1-N关联

因为关联需要基于外键,所以Hibernate必须要在一方的表中存储一个外键列,又因为1个person对应n个address、1个address对应1个person,所以在Address端(即n的一端)的表中存储外键列再合适不过了。

Person.hbm.xml

<class name="Person" table="person" lazy="true">
        <id name="id" type="int" column="id">
        	<generator class="identity"/>
        </id>
        <property name="name" type="string" column="name" lazy="true"/>
        <property name="age" type="integer" column="age" lazy="true"/>
       <!--不让1的一端控制关联关系,级联保存瞬态的关联对象-->
        <set name="addresses" inverse="true" cascade="all" lazy="true">
        	<key column="person_id" unique="false"/>
        	<one-to-many class="Address"/>
        </set>
</class>

  

Address.hbm.xml

<class name="Address" table="address" lazy="true">
        <id name="id" type="int" column="id">
        	<generator class="identity"/>
        </id>
        <property name="country" type="string" column="country"/>
        <property name="province" type="string" column="province"/>
        <property name="city" type="string" column="city"/>
        <many-to-one name="person" class="Person" column="person_id" unique="false" lazy="proxy"/>
</class>

2、基于连接表的双向1-N关联

Person.hbm.xml

<class name="Person" table="person" lazy="true">
        <id name="id" type="int" column="id">
        	<generator class="identity"/>
        </id>
        <property name="name" type="string" column="name" lazy="true"/>
        <property name="age" type="integer" column="age" lazy="true"/>
        <set name="addresses" table="person_address" inverse="true" cascade="all" lazy="true">
        	<key column="person_id" unique="false"/>
        	<many-to-many class="Address" column="address_id" unique="true"/>
        </set>
</class>

  Address.hbm.xml

<class name="Address" table="address" lazy="true">
        <id name="id" type="int" column="id">
        	<generator class="identity"/>
        </id>
        <property name="country" type="string" column="country"/>
        <property name="province" type="string" column="province"/>
        <property name="city" type="string" column="city"/>
        <join table="person_address">
        	<key column="address_id" unique="true"/>
        	<many-to-one name="person" class="Person" column="person_id" unique="false"/>
        </join>
</class>

 

二、双向N-N关联

 

分享到:
评论

相关推荐

    Hibernate一对一主键关联映射(双向关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是一种常见的关系数据库模型映射方式。这种关联通常发生在两个实体之间,且每个实体都只有一个对应的实例。本篇文章将详细探讨双向一对一主键关联映射...

    hibernate关联映射详解

    包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。

    Hibernate双向一对一关联映射(注解版)

    本主题聚焦于“Hibernate双向一对一关联映射”的注解实现,这是一种高级的数据库设计模式,用于处理两个实体之间一对一的关系。 在Hibernate中,一对一关联映射分为单向和双向。单向一对一映射通常涉及一个实体持有...

    hibernate多对多双向关联

    多对多双向关联 &lt;br&gt;注意映射规则: &lt;set name="roles" table="t_user_role"&gt;&lt;br&gt; &lt;key column="userid"/&gt;&lt;br&gt; &lt;many-to-many class="com.bjsxt.hibernate.Role" column="roleid"/&gt; &lt;/set&gt;&lt;br&gt; table...

    hibernate表之间3种双向关联映射

    总结来说,Hibernate中的双向关联映射是对象关系映射的重要组成部分,包括双向多对多、双向一对多和双向一对一。理解并熟练运用这些映射方式,有助于开发者更好地实现Java应用程序与数据库间的交互,提高开发效率和...

    Hibernate 关联关系映射分类

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

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

    总之,理解并正确实现Hibernate中的一对多双向关联映射是提升应用程序性能和数据一致性的重要步骤。通过细心配置映射文件,编写相应的实体类,以及妥善处理关联关系的维护,我们可以有效地管理复杂的数据结构。

    Hibernate ORM - 一对多双向关联关系

    标题“Hibernate ORM - 一对多双向关联关系”指的是在数据库建模中,Hibernate ORM(对象关系映射)框架如何处理一个实体类(如User)与多个实体类(如Article)之间的关系。在这种关系中,一个用户可以拥有多个文章...

    hibernate实体关联关系映射

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

    hibernate双向一对多关联映射(注解版)

    在Java的持久化框架Hibernate中,双向一对多关联映射是一种常见的关系映射方式,它模拟了数据库中的外键关联,使得一个实体可以拥有多个另一个实体的实例。在这个注解版的实现中,我们将深入探讨如何使用Hibernate的...

    hibernate的关联关系映射

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

    Hibernate一对一唯一外键关联映射(双向关联)

    本篇将详细讲解如何使用Hibernate实现一对一唯一外键(Unique Foreign Key)关联映射,并以双向关联为例进行深入探讨。 一、Hibernate一对一关联类型 一对一关联在现实世界中很常见,例如一个人只有一个身份证,一...

    Hibernate教程05_关系映射之一对一双向外键关联

    在本教程中,我们将深入探讨Hibernate中的一个关键概念——关系映射,特别是“一对一”双向外键关联。这种关联类型在数据库设计中很常见,尤其是在处理具有紧密耦合的实体时。Hibernate作为Java中广泛使用的对象关系...

    Hibernate教程14_关系映射之多对多双向关联

    标题"Hibernate教程14_关系映射之多对多双向关联"暗示我们将探讨如何在Hibernate中设置两个实体之间的双向多对多关联。双向意味着在两个实体类中,都可以直接访问到对方的集合。 在描述中提到的链接是一个CSDN博客...

    hibernate一对一主键关联映射(双项关联)

    本篇主要探讨的是基于主键(Primary Key)的双向关联映射,这在实际项目中非常常见,比如用户与账户、员工与职务等场景。 一、主键关联映射概述 主键关联映射是通过将两个实体类的主键相互引用来实现一对一关系的。...

    Hibernate教程07_关系映射之一对一双向主键关联

    在" Hibernate教程07_关系映射之一对一双向主键关联"中,我们将学习如何设置这种关联。首先,我们需要创建两个实体类,例如`Employee`和`Department`。在每个类中,我们都需要定义主键字段,并用`@Id`注解标记。然后...

Global site tag (gtag.js) - Google Analytics