hibernate延迟加载之集合Lazy特征2.<class>标签上的lazy不会影响到集合上的lazy特性,hibernate在集合上的lazy策略,可以取值:true/false/extra。代码实例如下:
CellectionlazyTest1.java
/** * 保持lazy默认,class标签lazy为true ,set标签lazy为true * */ public class CellectionlazyTest1 extends TestCase {
public void testLoad() { 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); } } |
CellectionlazyTest2.java
/** * 设置<class>标签上的lazy=false,set标签lazy为true */ public class CellectionlazyTest2 extends TestCase { public void testLoad() { 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); } } } |
CellectionlazyTest3.java
/** * 设置集合上的lazy=false,其它默认 */ 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); } } } |
CellectionlazyTest4.java
/** * 设置集合上的lazy=extra,其它默认 */ 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 //sql:select count(id) from t_student where classesid =? System.out.println(“student.count=” + students.size()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } } |