首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

hibernate范例简析-hibernate_lazy_for_collection

2012-10-31 
hibernate实例简析-hibernate_lazy_for_collectionhibernate在集合上的lazy策略,可以取值:true/false/extr

hibernate实例简析-hibernate_lazy_for_collection
hibernate在集合上的lazy策略,可以取值:true/false/extra

<class>标签上的lazy不会影响到集合上的lazy特性
===
<hibernate-mapping package="com.bjsxt.hibernate">
<class name="Classes" table="t_classes">
<id name="id">
<generator inverse="true" cascade="all" lazy="extra">
<key column="classesid"/>
<one-to-many table="t_student">
<id name="id">
<generator column="classesid"/>
</class>
</hibernate-mapping>

===
/**
* 保持lazy默认**/
//不会发出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());
}
---
//不会发出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());
===
/**
* 设置<class>标签上的lazy=false**/
//会发出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());
}
===
/**
* 设置集合上的lazy=false,其它默认**/
//不会发出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());
}
---
//不会发出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());
===
/**
* 设置集合上的lazy=extra,其它默认**/
//不会发出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());
}
---
//不会发出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());
===
Classes classes = new Classes();
classes.setName("尚学堂");
session.save(classes);

Student student1 = new Student();
student1.setName("10");
student1.setClasses(classes);
session.save(student1);

Student student2 = new Student();
student2.setName("祖儿");
student2.setClasses(classes);
session.save(student2);

热点排行