【hibernate】关联映射那些事(三)----双向映射

原创 2016年08月28日 20:46:54

     今天来说一下双向的关联映射,单向的关联映射只是由一端来映射维护关联关系,而双向的关联映射是由两端都要维护关联关系。不过没有关系,只要我们搞清楚了那些基本的单向关联关系,对于双向的关联关系我们只要拆分为两个单向的关联映射就可以了,也就是双向关联映射可以简单的理解为两个单向的关联映射,但是作为双向的关联映射其中还是有一些小的细节的东西,需要我们注意。

     双向1-N关联

     对于双向的关联关系,需要在实体类的两端都要加入另一端的引用。1的一端需要加入多的一端的set集合属性,N的一端需要加入1的一端的引用

     对于无连接表的双向1-N映射,可以参照单向1-N的配置文件和单向N-1的关联映射。

      在这里需要注意的一点就是使用1-N双向关联映射不要让1的一端控制关联关系,而是要使用N的一端控制关联关系。这是就需要在<set…/>元素中指定inverse=“true”,用于指定1的一端不控制关联关系。

      此外,还需注意的是:对于无连接表的双向1-N关联映射,需要在N的一端的数据表里增加一个外键列,这就存在一个问题,<many-to-one…/>元素将映射到外键列,而<set…/>元素里的<key…/>也用于映射外键列。因此需要映射文件为这两个元素指定column属性,并让这两个cloumn属性值相同。从这一点就可以看出其实双向的关联映射就是两个单向的关联映射的和。为了保证映射到同一个列中,我们需要人为设置列名。

 

     对于有连接表的双向1-N关联映射,我们可以参照有连接表的单向1-N关联映射和单向的N-1关联映射,在两端分别配置就可以了,需要注意的一点就是,我们需要人为的设置两端的管理表,也就是说我们要指定连接表的table属性,且属性值必须相同。同时<join…/>

元素中的<key…/>子元素和<many-to-many>元素的column属性相同,并且要一致。

 

双向N-N关联

双向多对多的关联映射只能使用连接表来保存关联关系,所以要在两端的配置文件中都要使用<many-to-many>元素,同时在实体类中还要引入另一端的Set集合,需要注意的同样的问题就是<many-to-many>元素中的table属性值要指定且要相等。

 

双向1-1关联

        基于外键的双向1-1关联,外键可以存放在任意一边,需要存放外键的一端,需要增加<many-to-one…/>元素,同时增加unique=”true”属性来表示该实体是1的一端。当我们选择一个表来增加外键(使用many-to-one)后,该表即变成从表,而另一个表则成为主表。

         另一端需要使用<one-to-one…/>元素,该元素需要使用name属性指定关联属性名。为了不再增加一列,而是使用外键关联,使用property-ref属性指定引用关联类的属性。

         

<?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" />
		<one-to-one name="address" property-ref="person" />
	</class>
</hibernate-mapping>

<hibernate-mapping >
	<class name="com.tgb.hibernate.Address" table="t_address">
		<id name="id" column="address_id">
			<generator class="native" />
		</id>
		<property name="name" />
		<property name="age" />
		<many-to-one name="person" unique="true" column="person_id" not-null="true" />
	</class>
</hibernate-mapping>
  

          基于主键的双向1-1映射,基于主键的双想1-1映射,其中一端的主键生成策略要设置为foreign,表明将对方的主键作为自己的主键

         

<?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" />
		<one-to-one name="address"  />
	</class>
</hibernate-mapping>

<hibernate-mapping >
	<class name="com.tgb.hibernate.Address" table="t_address">
		<id name="id" column="address_id">
			<generator class="foreigh" >
				<param name="property">person</param>
			</generator>
		</id>
		<property name="name" />
		<property name="age" />
		<one-to-one name="person"  />
	</class>
</hibernate-mapping>

 

 

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

相关文章推荐

hibernate关联映射-双向

8.4. 双向关联(Bidirectional associations) 8.4.1. 一对多(one to many)/多对一(many to one) 双向多对一关联 是最常见的关联...

Hibernate关联映射之多对多单/双向关联映射

实例1 单向映射 -----------此实例为多对多(Teacher——Student)单向关联映射,即老师教多个学生,但学生不知道自己被哪些个老师教------------ 方法一:使用Ann...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

Hibernate关联映射之一对一双向关联映射

1、基于外键的一对一双向关联映射 方法一:使用Annotation实现 (1)建立Husband类和Wife类 package com.model; import javax.persis...

Hibernate关联关系映射(双向篇)

Hibernate关联关系可分为单向关联和双向关联两大类。单向关联可以分为一对一、一对多、多对一和多对多4种关联方式,而多向关联可以分为一对一、一对多和多对多3种关联方式。Hibernate连接管理类...

9、Hibernate之关联映射(hibernate映射)

回顾Hibernate: 1. hibernate开发环境搭建 —-》 引入jar: hibernate.jar + required + jpa + 驱动包 —》 hibern...

【Hibernate】——单向关联映射

介绍      关联关系映射通常情况是最难配置正确的。在这个部分中,我们从单向关系映射开始,然后考虑双向关系映射,由浅至深讲述一遍典型的案例。在所有的例子中,我们都使用 Person和Address。...

hibernate关联映射-单向

关联关系映射通常情况是最难配置正确的。在这个部分中,我们从单向关系映射开始,然后考虑双向关系映射,逐步讲解典型的案例。在所有的例子中,我们都使将用 Person 和 Address。 我们根据映...

Hibernate一对多双向关联映射

Department部门和Employee员工是一对多的关系,再多的一端会有一个外键来

Hibernate多对多关双向联映射

类图: 映射的数据库表:

【SSH】——Hibernate(5)关联映射之双向映射

在上一篇文章【SSH】——Hibernate(4)关联映射之单项映射中,介绍了关联映射的单向映射,今天通过hbm.xml配置文件来介绍一下关联映射的双向映射。       一)一对一...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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