Hibernate一对多单向关联和双向关联映射方法及其优缺点 (待续)

一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同。
它们的区别在于维护的关系不同:

一对多关联映射是指在加载一的一端数据的同时加载多的一端的数据

多对一关联映射是指在加载多的一端数据的同时加载一的一端的数据

而单向一对多关联映射是在一的一端维护关系的,具有以下的缺点:

必须先保存多的一端后才可以保存一的一端,所以在保存多的一端时多的一端不知道一的一端是否
存在相应的数据,所以只能将维护的关系字段设置为null,如果为非空则无法保存。因为是一的一端维护关系,所以在保存一的一端时,会发出多余的
update语句维护多的一端的外键关系。

下面举例说明配置一对多的单向关联和双向关联的映射方法:

涉及到的一端和多端的类结构参考这篇文章:Hibernate一对多关联映射的配置及其级联删除问题

一对多双向关联映射的配置(可参考上面提供的文章):

在一的一端的集合上采用<key>标签进行映射:

<set name="quesion" inverse="true" cascade="delete">
	<key column="question_type_name"/>
	<one-to-many class="Question"/>
</set>

在多的一端加入一个外键private QuestionType questionType; 采用<many-to-one>标签进行映射:

<many-to-one name="questionType" column="question_type_name"/>

一对多双向关联映射一般让多的一端维护关系,所以需要设置inverse属性为true,表
示本段不维护关系,而交给另一端维护,既是多的一端。同时也可以使用设置cascade进行级联操作,如上面一篇文章的级联删除设
置:cascade=”delete”,表示删除一的一端的同时删除关联的多的一端的所有数据。

一对多单向关联映射:

一对多单向关联映射 多的一端Question不需要加入外键private QuestionType questionType; 只需要在一的一端的集合上采用<key>标签进行映射,映射代码如下:

<set name="quesion" inverse="true" cascade="delete">
	<key column="question_type_name"/>
	<one-to-many class="Question"/>
</set>

除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/hibernate-one-to-many-unidirectional-and-bidirectional-association-mapping-method-and-its-advantages-and-disadvantages.html
关键字: Hibernateone-to-many

后续资料参考:http://blog.csdn.net/liangoo7/article/details/8070166

时间: 2024-10-12 16:34:10

Hibernate一对多单向关联和双向关联映射方法及其优缺点 (待续)的相关文章

Hibernate之关于一对多,多对一双向关联映射

[Hibernate]之关于一对多,多对一双向关联映射 由于一对多,和多对一的双向关联映射基本上一样,所以这里就一起写下来! Annotations配置 @Entity @Table(name="t_group") publicclass Group { private Integer id; private String name; private Set<Person> persons=newHashSet<Person>();//set不允许重复,最适合数

Hibernate 一对多单向关联Demo

以Classes[班级]和Student[学生]为例的Demo Classes .java public class Classes implements Serializable { private long Cid; private String Cname; private String Cdesc; private Set<Student> students; //get和set } Student .java public class Student implements Seria

Hibernate一对多单向(双向)关联映射

(1).编写配置文件 Hibernate通过读写默认的XML配置文件hibernate.cfg.xml加载数据库配置信息.代码如下: <hibernate-configuration> <session-factory> <!-- 数据库驱动 --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 数据库连接的U

hibernate一对多单向关联时更新问题

需求:修改一个联系人,为其重新分配客户 问题:当更新一个托管态/持久态对象时,该对象关联了一个临时态对象,会报错 解决办法:使用级联保存更新 要更新谁,就在谁的映射文件中配置 <!-- 一对多关系映射: set元素的属性: cascade:级联操作. 取值: save-update:级联保存更新 delete:级联删除.--> <set name="linkmans" table="cst_linkman" cascade="save-u

SSH学习六 Hibernate 一对多 多对一的双向映射

其实就是前面两个的结合 Student里面有Teacher类作为成员,映射文件加上对teacherid的外键参照 Teacher里面有Student的Set,映射文件有set标签,里面声明one-to-many以及key 结合http://blog.csdn.net/u011026968/article/details/47154059 http://blog.csdn.net/u011026968/article/details/47156979 即可 版权声明:本文为博主原创文章,未经博主允

hibernate 一对多单向xml配置方式

实体类: public class Battery { private Integer id;//编号 private Set<BatteryVoltage> voltageList =new HashSet<>(); public class BatteryVoltage { private Integer id;//ID private Integer number;//编号 private Double voltage; //电压 private Integer equipm

Hibernate一对多、多对一关联

一对多.多对一关联:在多方加外键 示例:Group(一方)和User(多方),一个Group可以有多个User,每个User只能属于一个Group   多对一单向关联 在User(多方)中建Group(一方)对象,并添加@ManyToOne注解 1.建Group实体类和User实体类,添加Annotation注解,如下 @Entity @Table(name="_group") //group在MySQL中是关键字,不能直接做表名 public class Group { privat

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

在上一篇文章里.我们从端方向一端建立关联关系,完毕了从文章到作者的关联关系建立.但在实际的博客站点中,用户肯定还须要获取自己所写的文章,这时能够建立用户(一)对文章(多)的单向关联映射. 先来看我们的一方配置实例 package com.zeng.model; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.F

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

一对多单向关联映射 在实际的博客网站中,用户肯定需要获取自己所写的文章,这时可以建立用户(一)对文章(多)的单向关联映射. 先来看我们的一方配置实例 package com.zeng.model; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persisten