Hibernate 建立一对多双向关联关系
下面内容整理自《精通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 建立一对多双向关联关系的更多相关文章
- Hibernate映射一对多双向关联关系及部门关联属性
一对多双向关联关系:(Dept/Emp的案例) 既可以根据在查找部门时根据部门去找该部门下的所有员工,又能在检索员工时获取某个员工所属的部门. 步骤如下: 1.构建实体类(部门实体类加set员工集合) ...
- 06章 映射一对多双向关联关系、以及cascade、inverse属性
当类与类之间建立了关联,就可以方便的从一个对象导航到另一个对象.或者通过集合导航到一组对象.例如: 对于给定的Emp对象,如果想获得与它关联的Dept对象,只要调用如下方法 Dept dept=emp ...
- 映射一对多双向关联关系 cascade、inverse、属性
当类与类之间建立了关联,就可以方便的从一个对象导航到另一个对象.或者通过集合导航到一组对象.例如: 对于给定的Emp对象,如果想获得与它关联的Dept对象,只要调用如下方法 Dept dept=emp ...
- Hibernate映射多对多双向关联关系(小案例)
多对多双向关联关系(Project(工程)/Emp(员工)为案例): 步骤如下: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 pr ...
- hibernate(十)双向关联关系的CRUD
本文链接:http://www.orlion.ml/28/ 一.保存 1. 假设一个group有多个user,一个user只属于一个group,当保存user对象到数据库中时可以 User u = n ...
- Hibernate -- 映射多对多双向关联关系
1. 示例代码: Student.java package cn.itcast.many2many; import java.util.HashSet; import java.util.Set; @ ...
- grails一对多双向关联
前面分享了一些学习grails的心得,可是grails的知识还远不止这些,这次整理了一点有关grails一对多双向关联关系的知识.我认为这样的关联用的地方太多了,这次准备的样例是城市和区域的相关样例. ...
- Hibernate 一对多自身双向关联关系 用于类别表的实现
分类:一对多自身双向关联关系 Java持久化类: package com.hyy.hibernate.one_to_many.domain; import java.util.HashSet; imp ...
- hibernate 一对多双向关联 详解
一.解析: 1. 一对多双向关联也就是说,在加载班级时,能够知道这个班级所有的学生. 同时,在加载学生时,也能够知道这个学生所在的班级. 2.我们知道,一对多关联映射和多对一关联映射是一样的,都是在 ...
随机推荐
- DLib库Base64编解码示例
代码 #include <iostream> #include <fstream> #include <sstream> #include <string&g ...
- adb forward交互流程
命令:adb forward tcp:6100 tcp:7100 // PC上所有6100端口通信数据将被重定向到手机端7100端口server上 或者adb forward tcp:6100 loc ...
- EntityFramework 5.0 CodeFirst 教程03-数据结构的定义/列的属性
---------------------目录-------------------------- EntityFramework 5.0 CodeFirst 教程03-数据结构的定义/列的属性 (2 ...
- Delphi消息推送
移动端的消息推送大家都体验过,智能手机上一大堆广告等各种消息会不时从消息栏中弹出来骚扰你. PC程序中我们有时也会用到消息推送,比如通知之类.通常我们使用的方法可能更多地使用Socket之类来处理,有 ...
- 让硬盘灯不再狂闪,调整Win7系统绝技(转)
让硬盘灯不再狂闪,调整Win7系统绝技! Win7对硬盘的大量读写确实令人头疼,Win7虽然快,但这是以损耗我们的硬件作为代价的,特别是Win7系统中内置的几种系统服务,对普通用户没有多大的用处,但是 ...
- Learning to Rank:Point-wise、Pair-wise 和 List-wise区别
机器学习的 ranking 技术——learning2rank,包括 pointwise.pairwise.listwise 三大类型. [Ref-1]给出的: <Point wise rank ...
- MATLAB R2018a 输入中文却显示方框问号的问题
[问题] 安装完成软件后,我把编辑区字体重设为 consolas : 就会出现 输入中文注释却没办法正常显示的问题: [解决办法] 把字体改成 Monospaced (查了一下 说是MATLAB默认字 ...
- iOS应用之间的跳转
app应用跳转的原理解析 如何实现两个app应用之间的跳转 如何实现两个app之间跳转到指定界面 二.应用跳转原理 相信从一个应用跳转到另一个应用大家并不陌生,最常见的莫过于第三方登录,支付宝支付等等 ...
- 【C++】自定义比较函数小结
1.使用结构体grid作为map的key struct grid { int x; int y; }; (1)需要自定义比较函数operator<,不然会报错: error C2784: “bo ...
- 【Eclipse】Eclipse如何如何集成Tomcat服务器
需要的环境 下载和配置JDK 读者可参见JDK的安装与配置 下载和配置Tomcat 读者可参见Tomcat的下载和配置 下载Eclipse 读者可参见Eclipse官方网站 Eclipse 4.4.0 ...