Hibernate 关联映射 之 一对多单项关联 (二)聪明的懒加载
2012-07-12 07:12
267 查看
1、在映射文件中,关联的集合对象的懒加载Lazy有三种值:true、false、extra,通常我们使用extra,原因是该加载性能好。
对比下true 和 extra 两个值的不同加载情况
比如:有这样的两个需求:一、计算下改组下有多少联系人;二、改组下是否包含“张三”这个人
需求一的实现:
注解:执行完语句1不会发出Select语句(Group对象使用了懒加载),执行完语句2中的g.getCps(),会发出对Group对象的Select语句.
如果映射文件中关联对象的懒加载值为true,则执行.size()继续发出对ContactPerson对象的Select语句加载到内存,然后再计算有多少人,而如果是extra,发出的select语句是:select count(id) from contactPerson where gid =? 将取好的值返回给客户端。
需求二的实现:
注解:执行完语句2之后,如果懒加载设置的值为true,则后台打印出来的值为false,如果设置的值为extra,则打印出来的值为true(数据库存在ID为2的前提下)
原因是:如果设置extra,这里的contains方法,hibernate改变了缺省的集合的特性,即equals方法。
对比下true 和 extra 两个值的不同加载情况
比如:有这样的两个需求:一、计算下改组下有多少联系人;二、改组下是否包含“张三”这个人
需求一的实现:
public void testOnetoMany() { Session session = HibernateUtil.getSession();//语句20 try { session.beginTransaction(); Group g = (Group)session.load(Group.class,1);//语句1 System.out.println(g.getCps().size());//语句2 session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { session.close(); } }
注解:执行完语句1不会发出Select语句(Group对象使用了懒加载),执行完语句2中的g.getCps(),会发出对Group对象的Select语句.
如果映射文件中关联对象的懒加载值为true,则执行.size()继续发出对ContactPerson对象的Select语句加载到内存,然后再计算有多少人,而如果是extra,发出的select语句是:select count(id) from contactPerson where gid =? 将取好的值返回给客户端。
需求二的实现:
public void testOnetoMany() { Session session = HibernateUtil.getSession();//语句20 try { session.beginTransaction(); Group g = (Group)session.load(Group.class,1);//语句1 ContactPerson cp = new ContactPerson(); cp.setId(2); System.out.println(g.getCps().contains(cp));//语句2 session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { session.close(); } }
注解:执行完语句2之后,如果懒加载设置的值为true,则后台打印出来的值为false,如果设置的值为extra,则打印出来的值为true(数据库存在ID为2的前提下)
原因是:如果设置extra,这里的contains方法,hibernate改变了缺省的集合的特性,即equals方法。
相关文章推荐
- Hibernate 关联映射 之 一对多单项关联 (一)
- Hibernate 关联映射 之 一对多单项关联 (三)查询
- Hibernate关联映射(单项多对一和一对多、双向一对多)
- Hibernate关系映射级别注解(一对多单向外键关联、一对多(多对一)双向外键关联)
- hibernate--关联映射(一对多)
- hibernate 关联映射:多对一(一对多)双向关联关系
- hibernate关联映射(一对多)
- Eclipse快速上手Hibernate--7. 关联映射(一对多) (2)
- 【Hibernate框架】关联映射(一对多,多对一)
- hibernate映射多对多,一对一,一对多,自身关联综合应用
- Hibernate中的延迟加载、实体关联单向一对多及双向一对多实体关联
- hibernate映射技巧one-to-many(单项一对多)
- (转)Hibernate关联映射——一对多(多对一)
- Hibernate一对多、多对一关联映射
- hibernate映射技巧one-to-many(单项一对多)
- 【hibernate框架】关系映射之一对一单项外键关联(Annotation实现)
- Hibernate一对多关联映射及cascade级联操作
- Hibernate一对多及多对一关联映射(三)
- Eclipse快速上手Hibernate--7. 关联映射(一对多) (1)
- 初次邂逅Hibernate之关联映射(一对多,多对一,双向)