hibernate一对多双向关联
2016-07-06 19:43
169 查看
14.一对多双向关联
1.在多的一方关联一的一方,多的一方直接维护了关系,所以多的一方没有inverse属性,多的一方在保存自己的时候直接保存了外键,效率高。2.建立关系和保存对象,可以对应两个映射文件,保存多的一方自己对应自己的映射文件,建立关系可以使用一的一方表的inverse属性。这样发出update语句,效率低了。一对多,从多的一方建立关系,效率高。 例子在student这边保存属性private Classess classess;在student.hbm.xml文件在<class>下添加 <many-to-one name="classess" class="cn.itcast.domain.Classess" column="cid" cascade="save-update"></many-to-one>public class Mant2OneTest extends HibernateUtils{ @Test public void testSaveStudent_Cascade_Classess_Save(){ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Student student = new Student(); student.setSname("班秘"); student.setDescription("很神秘的一个工作"); Classess Classess = new Classess(); Classess.setCname("老毕亲子班"); Classess.setDescription("都是老毕的亲戚"); student.setClassess(Classess); session.save(student); transaction.commit(); session.close(); } /** * 一对多,从多的一端维护关系效率比较高 */ @Test public void testSaveStudent_R(){ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Student student = new Student(); student.setSname("潘金莲"); student.setDescription("很好"); Classess Classess = (Classess)session.get(Classess.class, 2L); //student.setClassess(Classess); Set<Student> students = new HashSet<Student>(); students.add(student); Classess.getStudents().add(student);//在hibernate内部查看的是Classess.hbm.xml session.save(student);//在hibernate内部查看的是Student.hbm.xml transaction.commit(); session.close(); } @Test public void testRelese_R(){ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Classess Classess = (Classess)session.get(Classess.class, 2L); Student student7 = (Student)session.get(Student.class, 7L); Student student8 = (Student)session.get(Student.class, 8L); student7.setClassess(null); student8.setClassess(null); transaction.commit(); session.close(); } @Test public void testDeleteS(){ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Classess Classess = (Classess)session.get(Classess.class, 1L); Set<Student> students = Classess.getStudents(); //Classess.setStudents(null);//解除关系 for(Student student:students){ session.delete(student); } transaction.commit(); session.close(); } }
15.一对多总结
1、如果让一的一方维护关系,取决于的因素有1、在一的一方的映射文件中,set元素的inverse属性为default/false
2、在客户端的代码中,通过一的一方建立关系
3、session.save/update方法是用来操作表的,和操作关系没有关系
2、怎么样采用级联的方法通过保存一个对象从而保存关联对象
1、如果session.save操作的对象是A,这个时候应该看A.hbm.xml,看set元素中cascade是否设置有级联保存
2、在客户端通过A建立关联
3、在客户端执行session.save(A)
3、一对多的情况,多的一方维护关系效率比较高
1、在多的一方many-to-one中没有inverse属性
2、在客户端通过多的一方建立关联
相关文章推荐
- Hibernate Oracle sequence的使用技巧
- jsp Hibernate批量更新和批量删除处理代码
- jsp hibernate的分页代码第1/3页
- Struts2+Hibernate实现数据分页的方法
- Hibernate环境搭建与配置方法(Hello world配置文件版)
- JAVA+Hibernate 无限级分类
- SSH整合中 hibernate托管给Spring得到SessionFactory
- jsp hibernate 数据保存操作的原理
- hibernate中的增删改查实现代码
- 解决hibernate+mysql写入数据库乱码
- java优化hibernate性能的几点建议
- java Hibernate延迟加载
- hibernate 常用方法介绍
- 详解Java的Hibernate框架中的注解与缓存
- 浅析Java的Hibernate框架中的继承关系设计
- Hibernate实现批量添加数据的方法
- Hibernate4在MySQL5.1以上版本创建表出错 type=InnDB
- JQuery+Ajax+Struts2+Hibernate框架整合实现完整的登录注册
- SSH框架网上商城项目第16战之Hibernate二级缓存处理首页热门显示
- 深入理解Hibernate中的flush机制