hibernate映射一对多双向关联关系实例
在电子商务应用中,经常会有这样的需求:根据给定的客户,得到该客户的所有订单;根据给定的订单,得到该订单的所属客户。对于这种双向关联的情况,在Hibernate应用中,也有人叫多对一双向关联,只是叫法不同而已,都是通过映射一对多双向关联关系来实现的。
不管是多对一单向关联还是(一对多)多对一双向关联,在关系型数据库中的表现方式都是一样的,均通过外键参照来实现如图4-18所示。
只是在持久化类与ORM映射文件中单向关联与双向关联存在一些区别而已,如图4-19所示。
持久化类Customer.java:
- package com.ORM;
- import java.io.Serializable;
- import java.util.*;
- public class Customer implements Serializable{
- private java.lang.Integer id; //ID号
- private java.lang.String cname; //客户姓名
- private java.lang.String bank; //银行账号
- private java.lang.String phone; //联系电话
- private Set orders = new HashSet(); //订单集合
- public Customer(){}
- //省略上述各属性的get/set方法对
- }
持久化类Orders.java:
- package com.ORM;
- import java.io.Serializable;
- public class Orders implements Serializable{
- private java.lang.Integer id; //ID号
- private java.lang.String orderno; //订单编号
- private java.lang.Double money; //订单金额
- private Customer customer; //订单的所属客户
- public Orders(){}
- //省略上述各属性的get/set方法对
- }
customer表与Customer类的ORM映射文件Customer.hbm.xml:
- <hibernate-mapping package="com.ORM">
- <class name="Customer" table="customer">
- <id name="id" column="ID" type="integer">
- <generator class="identity"/>
- </id>
- <property name="cname" column="CNAME" type="string" />
- <property name="bank" column="BANK" type="string" />
orders表与Orders类的ORM映射文件Orders.hbm.xml:
(1)创建供测试用的TestBean.java。
- ……
- public void addCustomer(){
- Customer customer = new Customer();
- customer.setCname("张三");
- customer.setBank("123456789123456789");
- customer.setPhone("020-12345678");
- dao.addCustomer(customer);
- }
- public Customer loadCustomer(Integer id){
- return dao.loadCustomer(id);
- }
- public void addOrders(Customer customer){
- Orders order = new Orders();
- order.setOrderno(new Long(System.currentTimeMillis()).toString());
- order.setMoney(new Double(rnd.nextDouble()*10000));
- //将Customer与Orders实例进行双向关联
- order.setCustomer(customer);
- customer.getOrders().add(order);
- dao.addOrders(order);
- }
- public Orders loadOrders(Integer id){
- return dao.loadOrders(id);
- }
- ……
(2)创建测试JSP页面index.jsp。
- <jsp:useBean id="test" class="com.bean.TestBean" />
- ...........
index.jsp运行分析。
(1)执行了test.addCustomer()以后,Hibernate向数据库服务器提交的SQL语句为:
- 【SQL】insert into customer (CNAME, BANK, PHONE) values
- ("张三", "123456789123456789","020-12345678")
(2)执行了test.loadCustomer(id)以后,Hibernate向数据库服务器提交的SQL语句为:
- 【SQL】select * from customer where ID=1
- select * from orders where CUSTOMER_ID=1
由于Customer.hbm.xml中的lazy="false",在装载Customer后,会立即装载与当前Customer对象一对多关联的所有Orders对象。
(3)执行了test.addOrders(customer);以后,Hibernate向数据库服务器提交的SQL语句为:
- 【SQL】insert into orders(ORDERNO,MONEY,CUSTOMER_ID)
- values("1163858590843",7158.76,1)
(4)执行了test.loadOrders(newInteger(1));以后,Hibernate向数据库服务器提交的SQL语句为:
- 【SQL】select * from orders where ID=1
- select * from customer where ID=1
由于Orders.hbm.xml中的lazy="false",在装载Orders后,会立即装载与当前Orders对象多对一关联的Customer对象。
index.jsp运行效果如图4-20所示。
6
hibernate映射一对多双向关联关系实例相关推荐
- 06章 映射一对多双向关联关系、以及cascade、inverse属性
当类与类之间建立了关联,就可以方便的从一个对象导航到另一个对象.或者通过集合导航到一组对象.例如: 对于给定的Emp对象,如果想获得与它关联的Dept对象,只要调用如下方法 Dept dept=emp ...
- hibernate的一对多双向关联映射----客户和订单关系
客户和订单关系:客户是一的一方,订单是多的一方. customer表: CREATE TABLE `customer` ( `ID` int(4) NOT NULL AUTO_INCREMENT , ...
- 【SSH系列】Hibernate映射 -- 一对多关联映射
映射原理 一对多关联映射和多对一关联映射的映射原理是一样一样的,所以说嘛,知识都是相通的,一通百通,为什么说一对多关联映射和多对一关联映射是一样的呢?因为她们都是在多的一端加入 ...
- Hibernate(九)一对多双向关联映射
上次的博文Hibernate从入门到精通(八)一对多单向关联映射中,我们讲解了一下一对多单向映射的相关 内容,这次我们讲解一下一对多双向映射的相关内容. 一对多双向关联映射 一对多双向关联映 射,即在 ...
- Hibernate的一对多关联关系(单向和双向)
在领域模型中,类与类之间最普遍的关系就是关联关系.在 UML 中,关联是有方向的.以 Customer 和 Order 为例:一个用户能发出多个订单, 而一个订单只能属于一个客户.从 Order 到 ...
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
在我们以前的数据库设计中,设计表就不是一件轻松的事情.多种事物之间往往都是有这样那样的关系的.那怎样设计表格,才能既将事情描述明白,又能使数据库设计的比较合理呢?那里我们提供了好多规范,好多约束来满足 ...
- hibernate的映射之二(一对多双向关联)
hibernate的一对多双关联 一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多 hihernate一对多关联映射(双向Dept<----->Emp) 一对多双 ...
- hibernate 的一对多关联关系映射配置
hibernate 是操作实体类: 表是一对多的关系,当创建这2个实体的时候 在一的一方定义一个多的一方的集合 在多的一方定义一个一的一方的对象 表是多对多的关系,当创建这2个实体的时候 在互相中都有 ...
- (八)Hibernate的一对多关联关系
一.概述 例如,以客户(Customer)和订单(Order)为例,一个客户能有多个订单,一个订单只能有一个客户. 从Customer到Order是一对多关联,在java类中的面向对象设计应该一个Cu ...
最新文章
- Squid下Http头信息优先级
- 180608-Git工具之Stash
- UEFI、BIOS、Secure Boot的关系和知识介绍
- 在java中将数据信息写入本地文本(1)
- java 变成题_Java 习题8 参考答案及解析
- 关于Java泛型和擦除
- php处理上传文件的步骤,php文件上传步骤
- 关于苹果Mac上设置固件密码的方法?
- 凸优化第五章对偶 5.5最优性条件
- vue 点击文字input_Vue实现点击按钮复制文本内容
- html 415错误,HTTP 415 错误 – 不支持的媒体类型(Unsupported media type)
- 华为搜索引擎Petal与Google的区别
- luogu P1724 东风谷早苗
- 记录一下blender烘焙光照漫反射贴图
- 计算机不能共享怎么设置,win7无法共享文件夹 共享文件设置不了共享怎么办?...
- c语言大作业成绩分析问题,河南科技大学c语言课程设计-综合排序设计报告-成绩分析问题.doc...
- HDU 2121 Ice_cream’s world II (最小树形图+虚根)
- python机器学习初探
- 数据恢复如何看异或问题
- 第三章-电阻式传感器
热门文章
- hdu4278 小想法
- C语言经典例16-最大公约数和最小公倍数
- 汇编 加法减法指令 inc dec add sub neg 标志寄存器测试
- 【RecyclerView】 十三、RecyclerView 数据更新 ( 移动数据 | 数据改变 )
- 【Android 异步操作】线程池 ( Worker 简介 | 线程池中的工作流程 runWorker | 从线程池任务队列中获取任务 getTask )
- unity游戏框架学习-框架结构
- 数据库为什么使用B+树而不是B树
- 使用nginx缓存服务器上的静态文件
- 网页标准HTML5标准较量正酣
- ORACLE 10G DATAGUARD实战步骤(转载)