`
fiwrc
  • 浏览: 23745 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

hibernate映射技巧one-to-many(双向一对多)

阅读更多
双向一对多关系,实际上是“单向一对多关系”与“多对一关系”的组合。也就是说我们必须在主控方配置单向一对多关系的基础上,在被控方配置多对一关系与其对应。



配置:
上面我们已经大致完成了单向方一对多关系的配置,我们只需在此基础上稍做修改,并对(t_address)的相关属性进行配置即可:
TUser.hbm.xml:
<hibernate-mapping>
<class
name="org.hibernate.sample.TUser"
table="t_user"
dynamic-update="true"
dynamic-insert="true"
>
……
<set
name="addresses"
table="t_address"
lazy="false"
inverse="true" ①
cascade="all"
sort="unsorted"
order-by="zipcode asc"
>
<key column="user_id"></key>
<one-to-many class="org.hibernate.sample.TAddress"/>
</set>
</class>
</hibernate-mapping>


① 这里与前面不同,inverse被设为“true”,这意味着TUser不再作为主控方,而是将关联关系的维护工作交给关联对象org.hibernate.sample.TAddress 来完成。这样TAddress对象在持久化过程中,就可以主动获取其关联的TUser对象的id,并将其作为自己的user_id,之后执行一次insert操作即可完成全部工作。


在one-to-many 关系中,将many 一方设为主动方(inverse=false)将有助性能的改善。(现实中也一样,如果要让胡记住全国人民的名字,估计花个几十年也不可能,但要让全国人民知道hu,可就不需要那么多时间了。J)



<hibernate-mapping>
<class
name="org.hibernate.sample.TAddress"
table="t_address"
dynamic-update="false"
dynamic-insert="false"
>
……
<many-to-one
name="user" ①
class="org.hibernate.sample.TUser"
cascade="none"
outer-join="auto"
update="true"
insert="true"
access="property"
column="user_id"
not-null="true"
/>
</class>
</hibernate-mapping>
① 在TAddress 对象中新增一个TUser field “user”,并为其添加对应的getter/setter 方法。同时删除原有的user_id 属性及其映射配置,否则运行期会报字段重复映射错误:“Repeated column in mapping”。



为什么会这样,我们已经配置了TAddress的many-to-one关系,这么看来似乎没什么效果……
不过,别忘了上面提到的inverse 属性,这里我们把TUser 的inverse 设为“true”,即指定由对方维护关联关系,在这里也就是由TAddress维护关联关系。
TUser既然不再维护关联关系,那么TAddress的user_id属性它也自然不会关心,必须由TAddress自己去维护user_id:



many-to-one 节点有以下属性:
属性 描述 类型 必须
name 映射属性 Text Y
column 关联字段。 Text Y
classes 类名
默认为映射属性所属类型 Text N
cascade 操作级联(cascade)关系。
可选值:
all : 所有情况下均进行级联操作。
none:所有情况下均不进行级联操作。
save-update:在执行save-update时
进行级联操作。
delete:在执行delete时进行级联操作。 Text N
update 是否对关联字段进行Update操作
默认:true Bool N
insert 是否对关联字段进行Insert 操作
默认:true Bool N
outer-join 是否使用外联接。
true:总是使用outer-join
false:不使用outer-join
auto(默认) :如果关联对象没有采用
Proxy机制,则使用outer-join. Text N
property-ref 用于与主控类相关联的属性的名称。
默认为关联类的主键属性名。
这里我们通过主键进行关联,所以采用默
认值即可。如果关联并非建立在主键之
间,则可通过此参数指定关联属性。 Text N
access 属性值的读取方式。
可选项:
field
property(默认)
ClassName Text N
分享到:
评论

相关推荐

    Hibernate one-to-many / many-to-one关系映射

    一、一对一(one-to-one)与一对多(one-to-many)关系 1. 一对一关系: 在现实世界中,如一个人只有一个身份证,这就是典型的"一对一"关系。在Hibernate中,可以通过@OneToOne注解实现。这种关系通常需要使用外键...

    (4)Hibernate中的many-to-one和one-to-many关系

    本话题主要探讨两种基本的关系映射类型:many-to-one(多对一)和one-to-many(一对多)。这两种关系映射是数据库中常见的关联类型,理解和掌握它们对于开发高质量的Java应用至关重要。 1. many-to-one关系 many-to...

    hibernate学习5之one-to-many双向关联.docx

    在配置双向一对多关联时,我们通常在"多"一端(这里是`Student`)的集合属性上使用`&lt;many-to-one&gt;`标签,将`Classes`对象映射到数据库中的外键。同时,在"一"端(`Classes`)使用`&lt;set&gt;`标签,表示班级可以包含多个...

    hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向

    在Hibernate中,一对一唯一外键关联映射可以通过 `&lt;many-to-one&gt;` 标签来配置。例如,以下是Person实体与IdCard实体的一对一唯一外键关联映射配置: ```xml &lt;many-to-one name="idCard" column="card_id...

    hibernate one-to-many 单/双向关联映射配置心得

    本文主要关注Hibernate中的一个核心概念——一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关联映射,特别是关于“一到多”单向和双向关联映射的配置心得。 首先,让我们了解“一到多”关联...

    Hibernate one-to-many-annotation

    在Hibernate中,`one-to-many`关系是常见的实体间关系之一,表示一个实体可以与多个其他实体相关联。本文将深入探讨`Hibernate one-to-many`注解的使用和实现细节。 ### 一、`@OneToMany`注解概述 `@OneToMany`...

    hibernate映射解析—七种映射关系

    7. **双向一对多关联映射**: - 与双向多对一类似,区别在于维护关系的方向。一的一方包含多的一方的集合,多的一方知道一的一方。 在实际应用中,选择合适的映射关系取决于数据模型和业务需求。比如,一对一关系...

    hibernate 映射-一对多双向

    不过,通常这类博客会详细讲解如何在实际项目中设置和使用双向一对多映射,包括配置XML映射文件或使用注解,以及解决可能遇到的问题,比如懒加载异常、级联操作的使用等。 至于文件`shop_goods_20131001`,由于缺乏...

    Hibernate映射解析 七种映射关系 后端 - Java.zip

    2. **一对多映射** (One-to-Many Mapping) 一个实体可以对应多个其他实体,例如一个班级可以有多个学生。这可以通过在多的一方使用`@ManyToOne`,在一方使用`@OneToMany`注解实现,通常使用List、Set等集合类型来...

    hibernate映射篇

    在本篇文章中,我们将深入探讨Hibernate中的几种关联映射,包括多对一(Many-to-One)、一对一(One-to-One)以及一对多(One-to-Many)映射。 首先,我们来看多对一(Many-to-One)的关联映射。这种映射关系通常...

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

    总结起来,Hibernate的双向一对多关联映射(XML)涉及的主要知识点包括:实体类的关联、`&lt;set&gt;`和`&lt;one-to-many&gt;`标签的使用、`&lt;many-to-one&gt;`标签的使用、以及如何在Java代码中维护这种关联。理解并熟练运用这些...

    hibernate的关联映射

    关联映射主要包括四种类型:一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)。下面我们将逐一探讨这些关联映射的配置方法。 1. **一对一关联映射** - **主键关联**...

    hibernate5--3.映射关系

    本文将深入探讨Hibernate5中的映射关系,主要包括多对多(Many-to-Many)和一对多(One-to-Many)这两种关系。 一、多对多映射(Many-to-Many) 多对多关系在数据库中表现为两个表之间存在多个连接记录,而在对象...

    Hibernate 的关联映射

    "Hibernate的关联映射"是Hibernate中的核心概念之一,用于模拟数据库中的关系,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)四种关系。现在,让我们详细探讨...

    hibernate 双向 多对对,一对多,一对一 映射的 集合

    总结起来,Hibernate的双向多对多、一对多、一对一映射提供了灵活的数据关联方式,使得Java对象和数据库表之间的关系得以顺畅地转换和操作。理解并熟练掌握这些映射关系,对于开发高效、稳定的Java持久层代码至关...

    hibernate映射关系

    本文将深入探讨Hibernate中的三种主要映射关系:一对一(One-to-One)、一对多(One-to-Many)以及多对多(Many-to-Many)。 ### 一对一映射(One-to-One) 一对一映射在现实世界中非常常见,例如一个人只有一个...

    hibernate对映射xml的一对多的双向关联详解

    本篇文章将深入探讨 Hibernate 中的一对多双向关联映射。 在数据库设计中,一对多关联是指一个实体可以与多个其他实体相关联,比如一个学生可以有多个课程,一个部门可以有多名员工。在Hibernate中,这种关系可以...

    hibernate 全面学习->hibernate 关联映射学习

    `hibernate_one2many_1`和`hibernate_one2many_2`的示例可能分别展示了单向和双向的一对多映射。单向映射意味着只有父类知道子类的存在,而双向则允许双方相互引用。在配置中,这通常涉及到`@OneToMany`注解的使用,...

    hibernate一对多,多对一,一对多双向关联

    在数据库设计中,实体间的关系通常包括一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关系,而在Hibernate这个ORM(对象关系映射)框架中,这些关系可以被映射到Java对象上,使得数据操作更加...

Global site tag (gtag.js) - Google Analytics