Hibernate学习笔记:一对多的关联关系(one-to-many) 双向关联
来源:互联网 发布:java合并两个excel 编辑:程序博客网 时间:2024/05/20 05:30
对多的关联关系也是最常见的对象之间的关系, 比如一个班级有很多个学生, 一个公司有很多部门,一个部门有很多雇员,一份债务(Credit)对应多个现金流(Cashflow),一个人有多个小孩, 一个客户有多张订单等等。
为了演示one-to-many,继续重用前面的对象Member会员,一个Member对象可以下多个订单Order,先添加一个订单类:
修改Member对象,给它添加一个属性orders,表示该Member对象持有的订单。
对应的数据库中的表myorder (本来我喜欢把表名和对象名保持一致, 但是因为在sqlserver2000中order是关键字,所以用myorder作表名) 有一个字段member_id和member表的id关联。下面是dml语句和映射文件。
Member.hbm.xml:
Order.hbm.xml:
修改一下MemberHibernateDao的测试用例main函数来测试看对Member 进行操作的时候可不可以成功的操作orders。
一切工作正常,遥测信号正常。(BS一下)。
但是有一个问题:Member和Order是一对多单向关联关系,通过Member可以获得orders, 但是通过Order却不能获得member。于是在给Member添加一个订单Order的时候, 需要先获得orders集合, 然后orders.add(new Order); 然后调save方法。而且更要命的是,观察一下hibernate输出的SQL会发现,为了添加一条order, 居然产生了两条sql语句:
insert into hibernate.dbo.myorder (total_price, member_id) values (?, ?) select scope_identity()
update hibernate.dbo.myorder set member_id=? where id=?
这样严重影响了数据库的性能。如果Order可以知道Member的存在,那问题就好办了,于是, 有了双向关联。
现在动手改善一下代码和配置文件,以形成双向关联。修改Order.java,添加一个属性member。
修改一下Order.hbm.xml, 使Order可以反向关联到Member:
修改一下Member.hbm.xml的orders配置,inverse="true"的意思是Member不再主控和order的关系, 由Order来控制它和Member的关系,这样的话,Order会去主动感知Member。
修改测试用例重新测试:
再次观察sql输出会发现插入order只需要1条sql。
- Hibernate学习笔记:一对多的关联关系(one-to-many) 双向关联
- Hibernate学习笔记:一对多的关联关系(one-to-many) 双向关联
- hibernate 一对多(one-to-many)双向关联
- Hibernate -- 一对多的双向关联关系
- 码农小汪-Hibernate学习4-关联关系映射many-to-one,many-to-one,one-to-many
- Hibernate学习笔记:一对一的关联关系(one-to-one)
- hibernate学习5之one-to-many双向关联
- hibernate学习5之one-to-many双向关联
- Hibernate一对多双向关联,以及双向关联在操作many方或one方的区别
- Hibernate单向一对多关联(Unidirectional One-To-Many)要点
- Hibernate one-to-many many-to-one 双向关联
- Hibernate 多表关联映射- 一对多关系映射(one-to-many)
- JPA学习笔记-映射双向一对多的关联关系
- Hibernate one to many 关联关系映射
- Hibernate学习笔记:多对多的关联关系(many-to-many)
- Hibernate学习笔记:多对多的关联关系(many-to-many)
- hibernate学习之——one-to-many(双向一对多关系)
- 学习笔记-----------表之间的关联(one-to-one many-to-one many-to-many)
- 用虚拟机安装Linux AS5的步骤
- JAVA程序员看C#的精华与糟粕
- 从VB到VB.NET——VB6程序员如何转向.NET
- PKU1904 king's quest
- 字符常量,字符变量,字符数组,字符串常量,字符串指针
- Hibernate学习笔记:一对多的关联关系(one-to-many) 双向关联
- p6spy 最新最全下载地址
- 使用IBatis作数据缓存
- 使用hibernate 3 + p6spy+ log4j 写日志文件(一)
- poj 1735 flip game代码
- 思念永无止境
- ERP基本功能及架构图(转文)
- 用JAVA 编写的第1个操作sql server 2005数据库程序
- 090822项目进展:学习emule源码1,