1
我有一些實體和延遲加載的引用。在em.close()之後,延遲加載的實體會發生什麼?
EntityA {
@ManyToMany
private List<EntityB> bs;
}
EntityB {
@ManyToMany
private List<EntityA> as;
}
我想知道,如果它是保存,如果他們已經加載的PC裏面前訪問持久化上下文(PC)外面那些慵懶的集合? E.g.
// put into PC
a = em.merge(a);
// trigger lazy loading
a.bs.size();
em.close();
// access outside PC
a.bs.size();
我做了一個EclipseLink的小測試,這似乎工作。但我不知道這是因爲:
- 懶惰 - 列出使用弱引用存儲和可訪問的,但現在可能是GCed在某些時候,
- 的懶列表是從數據庫中取出即使該實體不在PC中(無論出於何種原因),
- 即使數據庫將被關閉,lazy-Lists也會隨時啓動並訪問。
這可能聽起來很愚蠢,但是一旦初始化它就像'任何其他'的集合,對吧?背景中沒有弱引用,代理或任何其他「魔術」? – kerner1000
不知道。我不使用EclipseLink。爲什麼不嘗試,並打印出收集字段的類? – DN1
是的,一旦獲取,實體中就像其他任何參考一樣。只有在沒有獲取上下文的情況下才需要上下文 – Chris