虽然试图对延迟加载做一些测试,为了检查我是否理解得很好,我完全困惑。混淆懒惰加载
下面是我使用我的测试实体:
@Entity
public class Family {
@Id
private int id;
@OneToMany(mappedBy="family", fetch=FetchType.LAZY)
private Set<Person> members;
//getters & setters
public String toString(){
String s="";
for(Person p:getMembers()){
s+=p.getFirstName();
}
return s;
}
}
@Entity
public class Person implements Comparable<Person>{
@Id
private int id;
private String firstName;
private String lastName;
@ManyToOne
private Family family;
//getters &setters
}
这里是我的主要方法:
public static void main(String[] args) {
factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
em = factory.createEntityManager();
Query q = em.createQuery("select f from Family f");
List<Family> families= q.getResultList();
em.clear();
em.close();
factory.close();
for(Family f:families){
System.out.println(f);
}
}
我从延迟加载明白的是,如果一个属性被标记为被懒惰地取出,并且在被管理时没有被访问,它不会被加载到内存中,任何尝试访问它都不会工作。现在让我困惑的是,即使在关闭EM和EMF后,通过分离的Family列表访问懒惰成员属性时,上述测试也没有任何问题! ...这是正常的吗?我是否理解懒惰加载概念?
注:我正在使用嵌入式数据库的J2SE环境。我的提供商是EclipseLink的
由于提前
乔治
非常感谢您的帮助,我已经在[这里](http: //www.eclipse.org/forums/index.php/mv/msg/261691/755570/#msg_755570):-) –