【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读书笔记-----Hibernate的关联映射之N-N关联映射 .

四、N—N关联关系          1.1单向N-N的关联          单向的N-N关联和1-N关联的持久化...

Hibernate关系映射2:双向1-N关联

双向1-N关联 对于1-N关联,Hibernate推荐使用双向关联,而且不要让1的一端控制关联关系,而使用N的一端控制关联关系。 双向的N-1关联与1-N关联是完全相同的两种情形。两端...

hibernate的映射关系(1对n,n对1,n对n······)

1对多(1对多关系,name="novelSet"对应字段名  inverse=“true”不维护关联关系,order-by排序字段) ...
  • sd0902
  • sd0902
  • 2012-12-25 00:13
  • 2274

Hibernate学习随笔-----关系映射(3)单向1-N关联

单向1-N关联:从1的一端访问N的一端,而N的一端将以集合Set形式表现。 从这个意义上来看,1-N实际还包括N-N,将用于映射集合元素的元素改为使用元素。 对于单向的1-N的关联关系,只需要在1...

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

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

关联映射之①:单向N--->1关联

单向N--->1关联,比如多个人对应同一个住址,只需从人实体端可以找到对应的地址实体,无须关心某个地址的全部住户。 为了让两个持久化类支持这种关联映射,程序应该在N的一端的持久化类中增加一个属性,该属...

Hibernate关系映射1:单向N-1关联

单向N-1关联 单向N-1关系,比如多个人对应一个地址,只需从人实体端可以找到对应的地址实体,无须关系某个地址的全部住户。 单向 n-1 关联只需从 n 的一端可以访问 1 的一端。 ...

hibernate单向无连接表1—N关系映射

1、首先创建数据库本示例采用sql sever 2008 r2数据库进行测试 创建address表 创建person表 2、在myeclipse中通过hibernate反向工程生成对应的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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