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

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

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

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

必须先保存多的一端后才可以保存一的一端,所以在保存多的一端时多的一端不知道一的一端是否
存在相应的数据,所以只能将维护的关系字段设置为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

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

  1. Java进阶知识10 Hibernate一对多_多对一双向关联(Annotation+XML实现)

    本文知识点(目录): 1.Annotation 注解版(只是测试建表)    2.XML版 的实现(只是测试建表)    3.附录(Annotation 注解版CRUD操作)[注解版有个问题:插入值时 ...

  2. Java进阶知识09 Hibernate一对多单向关联(Annotation+XML实现)

    1.Annotation 注解版 1.1.在一的一方加Set 1.2.创建Customer类和Order类 package com.shore.model; import java.util.Hash ...

  3. Hibernate多对多单向关联和双向关联 --Hibernate框架

    Hibernate关联关系中相对比较特殊的就是多对多关联,多对多关联与一对一关联和一对多关联不同,多对多关联需要另外一张映射表用于保存多对多映射信息.本例介绍多对多单向关联和双向关联.单向关联 :指具 ...

  4. hibernate单向关联与双向关联的区别(原)

    今天看着hibernate的关联关系,有点迷糊.这里通过多对一表述一下双向与单向的区别. 多对一: 就是A表中的一个字段是B表的主键.多个A表中的数据可以对应一个B表中的数据,同理,一个B表中的数据可 ...

  5. Hibernate在关于一对多,多对一双向关联映射

    [Hibernate]之关于一对多,多对一双向关联映射 因为一对多.和多对一的双向关联映射基本上一样,所以这里就一起写下来! Annotations配置 @Entity @Table(name=&qu ...

  6. Hibernate 一对多单向关联Demo

    以Classes[班级]和Student[学生]为例的Demo Classes .java public class Classes implements Serializable { private ...

  7. Hibernate(十一)多对多双向关联映射

    上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我 们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看 ...

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

    (1).编写配置文件 Hibernate通过读写默认的XML配置文件hibernate.cfg.xml加载数据库配置信息.代码如下: <hibernate-configuration> & ...

  9. hibernate 一对多单向注解配置(实现级联操作 )

    学生表关联学生的课程表(一对多) 学生表实体类: @Entity @Table(name = "JXD_COM_STUDENT") public class StudentMode ...

随机推荐

  1. vmware使用vsphere的镜像

    vsphere镜像导出后可以使用vmware station打开, vsphere镜像导出时需要关机,否则会提示失败,有文件不能导出.

  2. ubuntu14.04 rabbitmq安装与使用 --修改RabbitMQ数据存储位置

    参考:https://blog.csdn.net/tianjiewang/article/details/58383062 说明: ubuntu14.04   rabiitmq 默认 安装路径 /va ...

  3. hadoop的client搭建-即集群外主机访问hadoop

    1增加主机映射(与namenode的映射一样): 增加最后一行  [root@localhost ~]# su - root1 [root@localhost ~]# vi /etc/hosts 12 ...

  4. 如何在notepad++实现代码自动化排版(调用Astyle)

    我先介绍这个怎么在notepad++中调用原版的astyle的方法. 在notepad++:运行或是F5, 在输入框中选择astyle.exe所在的目录,什么你没有astyle,下载地址https:/ ...

  5. 浅析USB HID ReportDesc (HID报告描述符)

    在USB中,USB Host是通过各种描述符来识别识别设备的,一般在设备枚举的过程将会获取有设备描述符/配置描述符/接口描述符/端点描述符/字符串描述符等 现在我们来介绍一下HID ReportDes ...

  6. oracle 内连接(inner join)、外连接(outer join)、全连接(full join)

    转自:https://premier9527.iteye.com/blog/1659689 建表语句: create table EMPLOYEE(EID NUMBER,DEPTID NUMBER,E ...

  7. Appium -选择、操作元素4

    webvie的测试 混合(Hybrid)应用 一部分是原生界面和代码,而一部分是内嵌网页 比如微信.支付宝 内嵌了一个浏览器内核,由浏览器内核实现的 安卓应用中的内嵌的展示网页内容的模块,我们称之为w ...

  8. Django 之多表查询 与多表的使用

    1.django的多表查询 主要区分为: 正向查询    逆向查询 1. 多表查询: 是一个复杂的查询,他分为对象查询和__模糊查询两种方式 2. 多表查询: 又分为 一对一查询, 一对多查询, 多对 ...

  9. Linux 远程登录配置

    如果使用FlashFxp的sftp无法登陆,提示SSH 错误: 协商认证模式失败,也同样这样操作 修改你的ssh配置文件 配置文件路径如:/etc/ssh/sshd_config PasswordAu ...

  10. jquery 属性-记住

    $("").attr(); $("").removeAttr(); $("").prop(); $("").remove ...