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.我们知道,一对多关联映射和多对一关联映射是一样的,都是在 ...
随机推荐
- V-rep学习笔记:Geometric Constraint Solver(几何约束求解)
The geometric constraint solver is slower and less precise at solving kinematic problems, but might ...
- Ajax学习(一)
ajax是什么? Asynchronous Javascript And XML:异步的js和xml 他能使得js访问服务器,而且是异步的. 服务器给客户端的响应一般是整个页面,一个完整的html页面 ...
- Eclipse和MyEclipse使用技巧--Eclipse中使用Git-让版本管理更简单
详细步骤: 第一部分 GIT介绍 (1)GIT往世今生 2005年开发Samba的Andrew试图破解BitKeeper(一款商业的版本控制系统)的协议(这么干的其实也不只他一个),被BitMove ...
- oracle初始化化表空间用户权限
oracle单实例安装完毕,需要初始化表空间.用户.等信息.不积跬步,何以至千里! 用sys账户登录oracle数据库,以此来完成所有操作! 01.创建临时表空间 create temporary t ...
- TxQueryRunner
package cn.itcast.jdbc; import java.sql.Connection; import java.sql.SQLException; import org.apache. ...
- Nginx 504 Gateway Time-out问题解决
今天站群VPS上面的所有站出现的 504 网关错误,现在小色还是菜菜的,斗胆解决下.在网上面搜解决方案,尝试设置ngxin的fast-cgi_buffers 和重启ngxin来解决,但是错误依旧.怀疑 ...
- Linux 操作MySQL常用命令行(转)
注意:MySQL中每个命令后都要以分号:结尾. 1.显示数据库 mysql> show databases; +----------+ | Database | +----------+ | m ...
- Ubuntu菜鸟入门(十一)—— windows 和 ubuntu时间冲突解决
一.问题原由 Ubuntu和Windows默认的时间管理方式不同,所以双系统发生时间错乱是正常的 Ubuntu默认时间是把BIOS时间当成GMT+0时间,也就是世界标准时,而我国在东八区(GMT+8) ...
- Linux安装最新版Mono,Jexus(截至2015年12月30日)
安装系统必备: yum -y install gcc gcc-c++ bison pkgconfig glib2-devel gettext make libpng-devel libjpeg-dev ...
- spring cloud 之 Feign 使用HTTP请求远程服务
一.Feign 简介 在spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.我们可以使用JDK原生的URLCo ...