下面内容整理自《精通Hibernate》第二版

注:既然是双向关联。“一对多双向关联”和“多对一双向关联”是同一回事。

对象位于内存中,在内存中从一个对象导航到还有一个对象显然比到数据库中查询数据的速度快多了。可是复杂的关联关联也会给编程带来麻烦。因此类与类之间是建立单向关联还是双向关联要由业务需求决定。

假设软件应用有大量这种需求:

1、依据给定的客户。查询该客户的全部订单。

2、依据给定的订单,查询发出订单的客户。

依据以上需求。最好还是为Customer类和Order类建立一对多双向关联。在上篇文章中介绍了Hibernate怎样建立多对一的单向关联(Order类到Customer类的多对一关联),在此不再赘述。

添加Customer类到Order类的一对多关联。首先须要在Customer类中添加一个集合类型的orders属性:

<span style="font-size:18px;">/** 在定义orders集合属性时将它初始化为集合实现类的一个实例,
*这能够提高程序的健壮性,避免应用程序訪问取值为null的orders集合的方法而抛出NullPointerException
*/
private Set orders = new HashSet();
public Set getOrders(){
return orders;
} public void setOrders(Set orders){
this.orders = orders;
}</span>

之后在Customer类的Hibernate映射文件里加入下面内容:

<span style="font-size:18px;"><set
name="orders"
cascade="save-update"
>
<key column="CUSTOMER_ID" />
<one-to-many class="mypack.Order"/>
</set></span>

<set>元素包含下面属性。

name:设定待映射的持久化类的属性的名字,此处为Customer类的orders属性。

cascade:当取值为"save-update",表示级联保存和更新。

<key>子元素:设定父方在子放中的外键,此处为“CUSTOMER_ID”,表明ORDERS表通过外键CUSTOMER_ID參照CUSTOMER表。

<one-to-many>子元素:表明orders集合中存放的是一组Order对象。

假设希望Hibernate删除Customer对象时,自己主动删除和Customer关联的Order对象,能够把cascade属性设为“delete”。

假设希望Hibernate自己主动删除不再和Customer对象关联的Order对象。能够把cascade属性设为“all-delete-orphan”。

Hibernate 建立一对多双向关联关系的更多相关文章

  1. Hibernate映射一对多双向关联关系及部门关联属性

    一对多双向关联关系:(Dept/Emp的案例) 既可以根据在查找部门时根据部门去找该部门下的所有员工,又能在检索员工时获取某个员工所属的部门. 步骤如下: 1.构建实体类(部门实体类加set员工集合) ...

  2. 06章 映射一对多双向关联关系、以及cascade、inverse属性

    当类与类之间建立了关联,就可以方便的从一个对象导航到另一个对象.或者通过集合导航到一组对象.例如: 对于给定的Emp对象,如果想获得与它关联的Dept对象,只要调用如下方法 Dept dept=emp ...

  3. 映射一对多双向关联关系 cascade、inverse、属性

    当类与类之间建立了关联,就可以方便的从一个对象导航到另一个对象.或者通过集合导航到一组对象.例如: 对于给定的Emp对象,如果想获得与它关联的Dept对象,只要调用如下方法 Dept dept=emp ...

  4. Hibernate映射多对多双向关联关系(小案例)

    多对多双向关联关系(Project(工程)/Emp(员工)为案例): 步骤如下: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 pr ...

  5. hibernate(十)双向关联关系的CRUD

    本文链接:http://www.orlion.ml/28/ 一.保存 1. 假设一个group有多个user,一个user只属于一个group,当保存user对象到数据库中时可以 User u = n ...

  6. Hibernate -- 映射多对多双向关联关系

    1. 示例代码: Student.java package cn.itcast.many2many; import java.util.HashSet; import java.util.Set; @ ...

  7. grails一对多双向关联

    前面分享了一些学习grails的心得,可是grails的知识还远不止这些,这次整理了一点有关grails一对多双向关联关系的知识.我认为这样的关联用的地方太多了,这次准备的样例是城市和区域的相关样例. ...

  8. Hibernate 一对多自身双向关联关系 用于类别表的实现

    分类:一对多自身双向关联关系 Java持久化类: package com.hyy.hibernate.one_to_many.domain; import java.util.HashSet; imp ...

  9. hibernate 一对多双向关联 详解

    一.解析: 1.  一对多双向关联也就是说,在加载班级时,能够知道这个班级所有的学生. 同时,在加载学生时,也能够知道这个学生所在的班级. 2.我们知道,一对多关联映射和多对一关联映射是一样的,都是在 ...

随机推荐

  1. input文本框在div中居中

    {display:block;margin-left:auto;margin-right:auto;}

  2. Weex开发之路(1):开发环境搭建

    一.Weex介绍 Weex是阿里巴巴在2016年6月份对外开源的一款移动端跨平台的移动开发工具,Weex的出现让我们的应用既有了Native的性能和H5的动态性,只要通过前端JS语法就能写出同时兼容i ...

  3. Ant压缩与解压缩

    package com.test.utils; import java.io.File; import java.io.FileOutputStream; import java.io.InputSt ...

  4. TextSharp详情

    TextSharp是一个生成Pdf文件的开源项目,最近在项目中有使用到这个项目,对使用中的经验作一个小结. ITextSharp中相关的概念: 一.Document 这个对象有三个构造函数: 隐藏行号 ...

  5. 【Spring】基于SpringMVC的图片验证码功能实现

    后台实现代码: ImgController.java 文件 package cn.shop.controller; import java.awt.Color; import java.awt.Fon ...

  6. Oracle 12C -- clone a non-cdb as a pdb

    将non-CDB置为只读模式: $ sqlplus '/as sysdba' SQL> select name, decode(cdb, 'YES', 'Multitenant Option e ...

  7. Extending a logical volume in a virtual machine running Red Hat or Cent OS (1006371)

    Purpose This article provides steps for extending the root partition residing in a logical volume cr ...

  8. Linux VFS数据结构

    先说明一下,linux内核中各种数据结构也不停的在变,所以不同版本的内核各个数据结构的定义可能会差别很大,这一组关于linux 文件系统的文章中的代码都摘自linux-2.6.34.1. VFS依赖于 ...

  9. 还没被玩坏的robobrowser(8)——robobrowser的实现原理

    背景 学习使用工具实际上不难,不过我们应该通过阅读工具源码来提升自己的水平. 多读代码,读好代码.很不错,robobrowser的代码简单易懂,值得学习. 预备知识 源码地址 一起其实是从browse ...

  10. Fragment使用具体解释

    fragment是Google在3.0版本号中推出的新功能,如今已经增加到V4包中,假设要使用V4兼容包中的Fragment须要将Activity换成FragmentActivity,调用的getSu ...