hibernate 集合上的lazy策略
来源:互联网 发布:深圳潮流网络 编辑:程序博客网 时间:2024/05/17 23:34
hibernate在集合上的lazy策略,可以取值:true/false/extra
<class>标签上的lazy不会影响到集合上的lazy特性
建议将集合上的lazy设置成extra
1.实体类
2.实体类映射文件
3.测试类1:CellectionlazyTest1.java
测试类2:CellectionlazyTest2.java
测试类3:CellectionlazyTest3.java
测试类4:CellectionlazyTest4.java
<class>标签上的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.实体类映射文件
- <?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="com.yx.zzg.bo.Student" table="t_student">
- <id name="id">
- <generator class="native"/>
- </id>
- <property name="name"/>
- <many-to-one name="classes" column="classesid"/>
- </class>
- </hibernate-mapping>
- <?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping package="com.yx.zzg.bo">
- <class name="Classes" table="t_classes">
- <id name="id">
- <generator class="native"/>
- </id>
- <property name="name"/>
- <set name="students" inverse="true" cascade="all">
- <key column="classesid"/>
- <one-to-many class="Student"/>
- </set>
- </class>
- </hibernate-mapping>
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;
- /**
- * 设置<class>标签上的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);
- }
- }
- }
原文 :http://skyuck.iteye.com/blog/484561 未验证 。。
- hibernate 集合上的lazy策略
- Hibernate的lazy策略
- Hibernate的Lazy加载策略
- 【Hibernate】Hibernate的检索策略:lazy、fetch
- Hibernate】Hibernate的检索策略:lazy、fetch
- hibernate 的lazy策略存在的问题
- hibernate的lazy策略使用总结
- hibernate的抓取策略(fetch和lazy)
- Hibernate中的lazy策略
- hibernate lazy策略
- hibernate lazy策略
- 13. Hibernate lazy策略
- hibernate lazy策略
- hibernate lazy 策略
- Hibernate lazy 策略
- Hibernate------lazy策略
- hibernate基础-lazy策略
- Hibernate lazy 策略01
- 【转帖】跟我一起学Makefile
- JAVA 正则表达式 (超详细)
- 写给浮躁的程序员
- WTL的两面性
- 【编程语言】java--String类常见方法汇总
- hibernate 集合上的lazy策略
- USACO Section 2.1 Hamming Codes - 题意相当坑爹..很无聊..
- java browser
- DBUtils
- DButils的用法
- SCRUM与XP的区别和联系
- 图的关键路径算法
- 如何在 CentOS、ubuntu 当中设置默认启动命令行
- GlusterFS将与Hadoop兼融