hibernate 一对多 双向关联 比如:
StuClass(学生班级) 学生(students)
StuClass类里边有一个 students集合
private Set stuList = new HashSet(0);
package po;
import java.util.HashSet;
import java.util.Set;
public class StuClass implements java.io.Serializable {
private Integer id;
private String cname;
private Set studentses = new HashSet(0);
public StuClass() {
}
//此处省略get set方法!
}
set 元素的 lazy属性为 true;
当我在应用程序里边加载了一个 StuClass 对象(比如sc)之后 调用它的
sc.getStudentses()方法时 会初始化 这个集合吗?
我用Hibernate.isInitialized()方法判断了一下 结果是 false
但是如果我syso.out.println(sc.getStudentses());
就会打印出 和 StuClass 对应的 students对象!!!
不太明白这是怎么回事?~
你把[quote]syso.out.println(sc.getStudentses()); [/quote][quote]if(Hibernate.isInitialized(stuClass.getStudentses())){
System.out.println("true");
}else {
System.out.println("false");
} [/quote]
它俩 换下位置 顺序 输出下 看看结果 或者你关联上源代码打断点 看一下 就明了了
程序执行到sc.getStudentses() 时,已经用到了学生集合,肯定就加载过来了。延迟加载时你还没用这个集合时,hibernate是不会帮你读到内存里的。加载StuClass 时debug看对象里面是不是已经加载了学生集合。
[color=indigo]你用到的时候,当然已经加载了啊
延迟加载时在你没用的时候并没真正去数据库里去取,而是用一个代理对象顶替,等到真正用的时候才去加载
http://songxh2.iteye.com/blog/149053
希望对你有帮助.[/color]