レイジーローディングに関するいくつかのテストを試みている間に、私がそれをよく理解しているかどうかを確認するために、私は完全に混乱しました。ここでレイジーローディングについて混乱しています
は私が私のテストに使用していたエンティティです:、私は遅延ロードから理解何
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);
}
}
かの属性がマークされていることである。
@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
}
ここに私の主な方法です遅延してフェッチされ、管理されている間はアクセスされません。メモリにロードされず、後でアクセスしようとしても機能しません。今私が混乱しているのは、EMとEMFを閉じた後でも、分離されたファミリーリストから遅延メンバー属性にアクセスする際に、上記のテストが問題にならないことです! ...それは普通ですか?私は怠惰なローディングの概念を理解していませんか?
注:私は組み込みDBを備えたJ2SE環境を使用しています。私のプロバイダはJPAプロバイダが遅延初期化を使用する必要はありませんので、それはあるかもしれないアドバンス
ジョージ
私はすでにあなたの答えを[ //www.eclipse.org/forums/index.php/mv/msg/261691/755570/#msg_755570):-) –