hibernate第二章:关联映射2
来源:互联网 发布:用友软件t6价格 编辑:程序博客网 时间:2024/05/24 05:04
双向一对多:
前面说到了单向一对多,单向多对一。希望大家都有了一定的了解。现在我们说下双向一对多。
什么是双向一对多:同时配置了单向一对多,和单向多对一,就成了双向一对多关联。
和前面谈到的一样:Dorm(宿舍),Student(学生)
数据库脚本也和上一章节一样。所以就不在这里贴了。
只写出不同的地方,最后会上传源码,供大家探讨。
Dorm.java 添加set集合保存student信息
private Set<Student> students=new HashSet<Student>();
Dorm.hbm.xml
<!-- 配置双向一对多 --><set name="students"><key><column name="dorm_id"></column></key><one-to-many class="org.wiksys.chap02.bean.Student"/></set>
Student.java
//设置少的一方属性private Dorm dorm;
Student.hbm.xml不做变化,测试可以从前面一张获取。
两个测试,分别测试多对一添加数据,一对多添加数据。
这里我们可以看出。双向多对一就是单向一对多和单向多对一的组合。
两个属性:cascade和inverse
配置关联时,我们需要考虑两点:程序执行效率和实际业务需要。在前面的练习中无论是单向的关联还是双向的关联,我们都需要session.save()才能保存到数据库。如果数据量很大,将非常痛苦。
此时,我们只需要在set中添加一个属性,cascade,即可持久化关联的其他瞬时对象。
demo:只需要修改上面的set即可
<set name="students" cascade="all"><key><column name="dorm_id"></column></key><one-to-many class="org.wiksys.chap02.bean.Student"/></set>
然后测试添加:
Student student=new Student();student.setName("hack");Dorm dorm = new Dorm();dorm.setName("106");dorm.getStudents().add(student);SessionFactory sf=null;Session session=null;Transaction tx=null;try {sf=new Configuration().configure().buildSessionFactory();session=sf.openSession();tx=session.beginTransaction();session.save(dorm);tx.commit();} catch (HibernateException e) {tx.rollback();e.printStackTrace();} finally {session.close();sf.close();}
我们查看打印的SQL语句:
Hibernate: select hibernate_sequence.nextval from dualHibernate: select hibernate_sequence.nextval from dualHibernate: insert into dorm (name, id) values (?, ?)Hibernate: insert into student (dorm_id, name, id) values (?, ?, ?)Hibernate: update student set dorm_id=? where id=?
可以看出,效果是一样的,编码却有了明显的改善。
cascade属性的常用属性值
inverse:反转指定关联关系中的方向。为false的是主动放,有主动方负责维护关联关系。这里就不做演示了。可以在set中添加这个属性进行测试下。
在这里明确一个概念性的东西:
inverse和cascade是两个互不相干的概念。inverse控制方向。cascade指的是层级之间的连锁操作。
要根据需要使用,否则会大大降低性能。
本章所需要的jar包http://download.csdn.net/detail/wiksys/4545524
本子源代码地址:http://download.csdn.net/detail/wiksys/4554623
当然,还有一个多对多关联:留给下章。
- hibernate第二章:关联映射2
- hibernate第二章:关联映射
- hibernate第二章:关联映射3
- Hibernate关联映射2
- hibernate 6 映射集合和实体关联 | hibernate 实战(第二版) 第6章映射集合和实体关联 | 笔记
- hibernate 7 高级实体关联映射 | hibernate 实战(第二版) 第7章高级实体关联映射 | 笔记
- hibernate 关联映射(2)
- Hibernate映射关联(2)
- 关联映射(hibernate映射)
- Hibernate关联映射-----一对一关联
- Hibernate集合映射、关联映射
- Hibernate进阶(2)--关联映射关系总结
- Hibernate映射关联详解
- hibernate一对一关联映射--
- Hibernate的关联映射
- hibernate 的关联映射
- hibernate一对一关联映射
- hibernate关联映射
- ubuntu 12.04 的源:sources.list :Ubuntu 12.04 Precise Pangolin源更新地址
- 我自己写的atoi(). 字符串转整型.
- rrdtool介绍
- IFrame通过JavaScript进行页面跳向 chrome可以跳转而IE报错
- 写一个子程序,名为&above_average,将一列数字作为其参数,返回所有大于平均值的数字(提示:
- hibernate第二章:关联映射2
- 移动应用程序图片格式
- 雨中飘荡的回忆
- 回调函数原理及实现浅析
- useradd命令使用
- 1.js 获取日期 指定数字按月累计日期!
- mac (基于Unix)终端命令
- Android - Broadcast receiver 作为内部类接受广播
- gcc 简单使用