hibernate 集合上的lazy策略
2011年09月01日
hibernate在集合上的lazy策略,可以取值:true/false/extra
标签上的lazy不会影响到集合上的lazy特性
建议将集合上的lazy设置成extra
1.实体类
package com.yx.zzg.bo; import java.util.Set; public class Classes { private int id; private String name; private Set students; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set getStudents() { return students; } public void setStudents(Set students) { this.students = students; } }
package com.yx.zzg.bo; public class Student { private int id; private String name; private Classes classes; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Classes getClasses() { return classes; } public void setClasses(Classes classes) { this.classes = classes; } }
2.实体类映射文件
3.测试类1:CellectionlazyTest1.java
package com.yx.zzg.test; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import com.yx.zzg.bo.*; import junit.framework.TestCase; import org.hibernate.Session; /** * 保持lazy默认 * @author Administrator * */ public class CellectionlazyTest1 extends TestCase { public void testLoad1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql Classes classes = (Classes)session.load(Classes.class, 1); //会发出sql System.out.println("classes.name=" + classes.getName()); //不会发出sql Set students = classes.getStudents(); //会发出sql for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println("student.name=" + student.getName()); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } public void testLoad2() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql Classes classes = (Classes)session.load(Classes.class, 1); //会发出sql System.out.println("classes.name=" + classes.getName()); //不会发出sql Set students = classes.getStudents(); //会发出sql,发出查询全部数据的sql System.out.println("student.count=" + students.size()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } }
测试类2:CellectionlazyTest2.java
package com.yx.zzg.test; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import com.yx.zzg.bo.*; import junit.framework.TestCase; import org.hibernate.Session; /** * 设置标签上的lazy=false * @author Administrator * */ public class CellectionlazyTest2 extends TestCase { public void testLoad1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //会发出sql Classes classes = (Classes)session.load(Classes.class, 1); //不会发出sql System.out.println("classes.name=" + classes.getName()); //不会发出sql Set students = classes.getStudents(); //会发出sql for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println("student.name=" + student.getName()); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } }
测试类3:CellectionlazyTest3.java
package com.yx.zzg.bo; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import com.yx.zzg.bo.* import junit.framework.TestCase; import org.hibernate.Session; /** * 设置集合上的lazy=false,其它默认 * @author Administrator * */ public class CellectionlazyTest3 extends TestCase { public void testLoad1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql Classes classes = (Classes)session.load(Classes.class, 1); //会发出sql,会发出两条sql分别加载Classes和Student System.out.println("classes.name=" + classes.getName()); //不会发出sql Set students = classes.getStudents(); //不会发出sql for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println("student.name=" + student.getName()); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } public void testLoad2() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql Classes classes = (Classes)session.load(Classes.class, 1); //会发出sql,会发出两条sql分别加载Classes和Student System.out.println("classes.name=" + classes.getName()); //不会发出sql Set students = classes.getStudents(); //不会发出sql System.out.println("student.count=" + students.size()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } }
测试类4:CellectionlazyTest4.java
package com.yx.zzg.test; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import com.yx.zzg.bo.*; import junit.framework.TestCase; import org.hibernate.Session; /** * 设置集合上的lazy=extra,其它默认 * @author Administrator * */ public class CellectionlazyTest4 extends TestCase { public void testLoad1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql Classes classes = (Classes)session.load(Classes.class, 1); //会发出sql System.out.println("classes.name=" + classes.getName()); //不会发出sql Set students = classes.getStudents(); //会发出sql for (Iterator iter=students.iterator(); iter.hasNext();) { Student student = (Student)iter.next(); System.out.println("student.name=" + student.getName()); } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } public void testLoad2() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //不会发出sql Classes classes = (Classes)session.load(Classes.class, 1); //会发出sql System.out.println("classes.name=" + classes.getName()); //不会发出sql Set students = classes.getStudents(); //会发出sql,发出一条比较智能的sql System.out.println("student.count=" + students.size()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } }
发表评论
-
我的C++启示录
2012-01-20 08:12 703我的C++启示录 2010年09 ... -
《编程基础增加篇 对象的四大引用 SoftReference》
2012-01-20 08:12 901《编程基础增加篇 对象的四大引用 SoftReference》 ... -
十道海量数据处理面试题和十个应对方法
2012-01-20 08:12 686十道海量数据处理面试 ... -
Java培训笔记二十一()
2012-01-20 08:12 813Java培训笔记二十一() 2010年12月13日 特殊 ... -
深入理解asp.net SessionState
2012-01-20 08:12 847深入理解asp.net SessionState 2010年 ... -
对比删除文件的VBS脚本
2012-01-19 13:28 715对比删除文件的VBS脚本 2011年04月02日 一段对 ... -
VBS脚本得到CPU使用率,硬盘使用率和内存使用率
2012-01-19 13:28 1025VBS脚本得到CPU使用率,硬盘使用率和内存使用率 2011 ... -
VBS脚本
2012-01-19 13:28 801VBS脚本 2011年06月30日 我用VBS写的往EX ... -
xp、2003开3389+非net创建管理用户+Shift后门+自删除脚本+提权VBS 整理收集
2012-01-19 13:28 834xp、2003开3389+非net创建管理用户+Shift后门 ... -
Trojan.DL.VBS.Agent.r 脚本病毒 ASP解密
2012-01-19 13:28 844Trojan.DL.VBS.Agent.r 脚本病毒 ASP解 ... -
存储术语大全
2012-01-17 03:17 600存储术语大全 2011年09 ... -
HP ProLiant 服务器 - POST 错误消息和蜂鸣代码(8)1700 系列错误消息
2012-01-17 03:17 4566HP ProLiant 服务器 - POST 错误消息和蜂鸣代 ... -
SP系统手机常用问题解答【c730】
2012-01-17 03:17 739SP系统手机常用问题解答【c730】 2010年07月13日 ... -
Android智能手机刷机教程
2012-01-17 03:17 895Android智能手机刷机教程 2011年03月07日 ... -
快乐大东北(四)
2012-01-16 01:51 1174快乐大东北(四) 2009年09月09日 快乐大东北(四 ... -
谁会告诉我未来的你在哪里
2012-01-16 01:51 636谁会告诉我未来的你在 ... -
论一论我遇到过的数学老师们
2012-01-16 01:51 567论一论我遇到过的数学 ... -
东北话测试
2012-01-16 01:51 656东北话测试 2009年07月07日 这是一个相当有闹的问 ... -
Stellent UCM installation in Linux 5.3
2012-01-11 01:46 758Stellent UCM installation in Li ... -
Berkeley DB实例
2012-01-11 01:45 654Berkeley DB实例 2011年09月01日 p ...
相关推荐
博文链接:https://llying.iteye.com/blog/221700
019 关联映射文件中集合标签中的 lazy(懒加载)属性 020 、单端关联上的 lazy(懒加载)属性 021 继承关联映射 022 component(组件)关联映射 023 复合主键 关联映射 024 其它 关联映射 025 hibernate 悲观锁、乐观锁 ...
19.1.7. 使用延迟属性抓取(Using lazy property fetching) 19.2. 二级缓存(The Second Level Cache) 19.2.1. 缓存映射(Cache mappings) 19.2.2. 策略:只读缓存(Strategy: read only) 19.2.3. 策略:读/...
5.1.2 Hibernate访问持久化类属性的策略 5.1.3 在持久化类的访问方法中加入程序逻辑 5.1.4 设置派生属性 5.1.5 控制insert和update语句 5.2 处理SQL引用标识符 5.3 创建命名策略 5.4 设置数据库Schema...
19.1.7. 使用延迟属性抓取(Using lazy property fetching) 19.2. 二级缓存(The Second Level Cache) 19.2.1. 缓存映射(Cache mappings) 19.2.2. 策略:只读缓存(Strategy: read only) 19.2.3. 策略:读/...
19.1.7. 使用延迟属性抓取(Using lazy property fetching) 19.2. 二级缓存(The Second Level Cache) 19.2.1. 缓存映射(Cache mappings) 19.2.2. 策略:只读缓存(Strategy: read only) 19.2.3. 策略:读/...
19.1.7. 使用延迟属性抓取(Using lazy property fetching) 19.2. 二级缓存(The Second Level Cache) 19.2.1. 缓存映射(Cache mappings) 19.2.2. 策略:只读缓存(Strategy: read only) 19.2.3. 策略:读/...
19.1.7. 使用延迟属性抓取(Using lazy property fetching) 19.2. 二级缓存(The Second Level Cache) 19.2.1. 缓存映射(Cache mappings) 19.2.2. 策略:只读缓存(Strategy: read only) 19.2.3. 策略:读/...
延迟初始化(延迟加载)(Lazy Initialization) 6.6. 集合排序(Sorted Collections) 6.7. 使用<idbag><br>6.8. 双向关联(Bidirectional Associations) 6.9. 三重关联(Ternary Associations) 6.10....
使用延迟属性抓取(Using lazy property fetching) 19.2. 二级缓存(The Second Level Cache) 19.2.1. 缓存映射(Cache mappings) 19.2.2. 策略:只读缓存(Strategy: read only) 19.2.3. 策略:读/写缓存...
1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...
19.1.7. 使用延迟属性抓取(Using lazy property fetching) 19.2. 二级缓存(The Second Level Cache) 19.2.1. 缓存映射(Cache mappings) 19.2.2. 策略:只读缓存(Strategy: read only) 19.2.3. 策略:读/...
使用延迟属性抓取(Using lazy property fetching) 20.2. 二级缓存(The Second Level Cache) 20.2.1. 缓存映射(Cache mappings) 20.2.2. 策略:只读缓存(Strategy: read only) 20.2.3. 策略:读/写缓存...
5.1.2 Hibernate访问持久化类属性的策略 5.1.3 在持久化类的访问方法中加入程序逻辑 5.1.4 设置派生属性 5.1.5 控制insert和update语句 5.2 处理SQL引用标识符 5.3 创建命名策略 5.4 设置数据库Schema...
5.1.2 Hibernate访问持久化类属性的策略 5.1.3 在持久化类的访问方法中加入程序逻辑 5.1.4 设置派生属性 5.1.5 控制insert和update语句 5.2 处理SQL引用标识符 5.3 创建命名策略 5.4 设置数据库Schema...
5.1.2 Hibernate访问持久化类属性的策略 5.1.3 在持久化类的访问方法中加入程序逻辑 5.1.4 设置派生属性 5.1.5 控制insert和update语句 5.2 处理SQL引用标识符 5.3 创建命名策略 5.4 设置数据库Schema...
* @GenericGenerator —— 注解声明了一个hibernate的主键生成策略。支持十三种策略。该注解有如下属性 * name 指定生成器名称 * strategy 指定具体生成器的类名(指定生成策略)。 * parameters 得到strategy指定的...
• Joined Subclass Strategy: the <joined-subclass> element in Hibernate 连接的子类策略 @Inheritance 注解来定义所选的之类策略。 每个类一张表 @Entity @Inheritance(strategy = InheritanceType.TABLE_PER...
19.1.7. 使用延迟属性抓取(Using lazy property fetching) 19.2. 二级缓存(The Second Level Cache) 19.2.1. 缓存映射(Cache mappings) 19.2.2. 策略:只读缓存(Strategy: read only) 19.2.3. 策略:读/...