雖然試圖對延遲加載做一些測試,爲了檢查我是否理解得很好,我完全困惑。混淆懶惰加載
下面是我使用我的測試實體:
@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):-) –