下面内容整理自《精通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. word2vec训练中文模型

    --  这篇文章是一个学习.分析的博客 --- 1.准备数据与预处理 首先需要一份比较大的中文语料数据,可以考虑中文的维基百科(也可以试试搜狗的新闻语料库).中文维基百科的打包文件地址为 https: ...

  2. springboot自定义jdbc操作库+基于注解切点AOP

    发布时间:2018-11-08   技术:springboot+aop   概述 springBoot集成了自定义的jdbc操作类及AOP,因为spring自带的JdbcTemplate在实际项目中并 ...

  3. nginx深入使用

    1. nginx使用命令 nginx -s stop --快速关闭Nginx,可能不保存相关信息,并迅速终止web服务. nginx -s quit --平稳关闭Nginx,保存相关信息,有安排的结束 ...

  4. EntityFramework 5.0 CodeFirst 教程03-数据结构的定义/列的属性

    ---------------------目录-------------------------- EntityFramework 5.0 CodeFirst 教程03-数据结构的定义/列的属性 (2 ...

  5. Sql Server 在数据库中所有表所有栏位 找出匹配某个值的脚本(转)

    转自: http://blog.csdn.net/chenghaibing2008/article/details/11891419 (下面代码稍有修改,将要查找的内容直接作为参数传人,并且使用=而不 ...

  6. Java6 WebService的发布(转)

      Java6 WebService的发布   转:http://lavasoft.blog.51cto.com/62575/227988/   WebService服务发布往往比较混乱,Axis2的 ...

  7. java struts2入门学习实例--使用struts进行验证

    一.为什么要进行验证? 验证几乎是注册登录的必须前提,验证的主要作用有两点: 1.安全性 2.对用户提供差异化服务. 二.如何验证? ActionSupport类中有一个validate()方法,这是 ...

  8. 【LeetCode】230. Kth Smallest Element in a BST (2 solutions)

    Kth Smallest Element in a BST Given a binary search tree, write a function kthSmallest to find the k ...

  9. 【MATLAB】matlabR2010a与vs2010联合编译设置

    在matlab中编译C++程序,首先要配置编译器>> mex -setupPlease choose your compiler for building external interfa ...

  10. Swift 可选型

    1.可选型 Swift 语言为我们提供了一种全新的.更加安全的类型 "可选型".可选型是使用范型枚举的形式来组织的,也就是说此特性可以运用于所有的类型.结构体.类或者其他复杂数据类 ...