【hibernate】关联映射那些事(二)--单向1-N映射和单向N-N映射

原创 2016年08月28日 18:29:17

       上一篇文章介绍了N-1关联映射和1-1关联映射,当然了都是单向的映射。这一次我们来看看单向的1-N关联映射。

       单向1-N的关联映射是由1的一端来维护两个实体类的关联关系,所以在1的一端需要使用<set>集合来保存多的一端。

       这次我们假定一个人可以有多个地址,在person类中我们引用Address实体,使用Set集合来保存多个Address实体

 

无连接表的单向1-N

       下面是使用无连接表的单向1-N的映射文件

<?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="com.tgb.hibernate.Person" table="t_person">
		<id name="id" column="person_id">
			<generator class="native" />
		</id>
		<property name="name" />
		<property name="age" />
		<!-- 映射集合属性 -->
		<set name="addresses">
			<!-- 指定关联的外键列 -->
			<key column="person_id" />
			<!-- 用一映射到关联类属性 -->
		<one-to-many class="Address"  />
		</set>
	</class>
</hibernate-mapping>

        在使用无连接的单向1-N映射文件中,我们知道这样两点 1)由1的一端来维护主键关系,多的一端无法知道1的一端。2)需要在多的一端来加入1的一端的外键关系。考虑到这两点,因为是由1的一端来维护关系的,所以在进行插入操作时,一端的实体d到多端的关联,一端的外键没有被当做多端的实体对象的一部分,因而在插入多的一端时无法为多的一端指定外键,需要一条额外的update语句,这样的话会影响性能。所以并不推荐使用1-N的单向关联,而改为使用双向的1-N关联(后面的文章会总结到)

 

使用连接表的单向1-N

   对于使用有连接表的1-N单向关联,则要使用<many-to-many>来映射关联实体。为了保证实体是1的一端,因此要为元素指定unique=”true”.

     

<?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="com.tgb.hibernate.Person" table="t_person">
		<id name="id" column="person_id">
			<generator class="native" />
		</id>
		<property name="name" />
		<property name="age" />
		<!-- 映射集合属性 -->
		<set name="addresses" table="t_person_address">
			<!-- 指定关联的外键列 -->
			<key column="person_id" />
			<!-- 使用many-to-many映射到关联 -->
		<many-to-many class="Address" column="address_id" unique="true"/>
		</set>
	</class>
</hibernate-mapping>
       当程序需要保存一个Person对象和两个Address对象的时候,并建立之间的关系的时候,需要5条insert语句其中包括三条对象的插入语句和两条建立Person和Address对象关系的语句。


单向N-N关系

单向N-N关系和上面提到的有连接表的单向1-N关系基本上是一样的,只有去掉<many-to-many>中的unique="true"就是单向N-N关联映射。




版权声明:那些你不愿意做的事情才能让你真正成长

Hibernate的关联映射之N-N关联映射 .

四、N—N关联关系          1.1单向N-N的关联          单向的N-N关联和1-N关联的持久化类完全一样,控制关系的一端需要增加一个set集合属性,被关联的持久化实例...
  • u013310119
  • u013310119
  • 2016年05月08日 22:30
  • 345

【Hibernate】二、Hibernate映射详解(一对一单向关联)

Hibernate的目的就是让开发人员觉得好像是将JAVA对象存储到了数据库里一样。但是,我们知道数据库中只有表,如何将java对象经过Hibernate存储到数据库中,又如何将数据库中存储的数据通过...
  • u010902721
  • u010902721
  • 2016年09月29日 23:08
  • 2349

【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)

基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用。...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2014年10月22日 08:15
  • 31142

【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)

两个实体对象之间是一对一的关联映射,即一个对象只能与另外唯一的一个对象相对应。例如:一个人(Person)只有一张身份证(IdCard)。...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2014年10月23日 08:15
  • 23569

一对多单向双向映射关联关系之映射文件与级联操作

对于关系数据库而言只支持一对一或多对一的单向关联,配置好一对多双(单)向关联的关键是写映射文件与实体类的属性问题。以Customer类和Order类为例,一位客户可以下多个订单,一个订单只属于一位客户...
  • zeb_perfect
  • zeb_perfect
  • 2014年11月10日 09:28
  • 1147

Hibernate的关联映射(1)-单向N-1关联

1>无连接表的N-1关联 对于无连接表的N-1关联而言,程序只要在N的一端增加一列外键,让外键值记录该对象所属的实体即可,Hiberante可以使用@JoinColumn来修饰代表关联实体的属性,@J...
  • an_2016
  • an_2016
  • 2016年07月09日 12:05
  • 726

hibernate5(9)注解映射[1]多对一单向关联

在实际的项目开发中,我们常常需要建立我们实体类间的复杂关系,比如在一个博客网站中,用户会写文章,则文章与用户的关系就是多对一的映射关系。 现在先看一个配置实例:我们的文章实体类package com...
  • qwe6112071
  • qwe6112071
  • 2016年04月07日 19:52
  • 3960

【Hibernate步步为营】--(一对多映射)之单向关联

上篇文章讨论了双向关联的一对一映射,用了两个章节,主要是从主键和外键两种关联映射展开详细讨论,双向关联的映射需要在两个映射文件中分别添加相互的对应关系,斌刚在相应的类中添加对应的关联类的属性,这样在一...
  • zhang_xinxiu
  • zhang_xinxiu
  • 2014年05月24日 09:06
  • 5684

Hibernate基础之九:多对多,单/双向关联 @ManyToOne @OneToMany

1.组件映射,一个类中包含另一个 组件上@Eembeded 2.多对一,单向关联 “多的”聚合“一的”1个实例, Group--User user的getGroup上加@ManyToOne ...
  • bestcxx
  • bestcxx
  • 2016年06月27日 10:40
  • 754

hibernate的多对一,一对多单向关联,双向关联区别与联系

首先来看一下多对一。举个例子来说用户和组。一个组中有多个用户,一个用户只能属于一组。用户和组之间就是一个多对一的关系的。如下图        这个关系我们要怎样维护呢?我们想象一下,假如...
  • yuntaishan0102
  • yuntaishan0102
  • 2013年12月13日 09:00
  • 2574
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【hibernate】关联映射那些事(二)--单向1-N映射和单向N-N映射
举报原因:
原因补充:

(最多只允许输入30个字)