我有一些实体和延迟加载的引用。
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做了一个小测试,这似乎有效。但我不确定这是因为:
答案 0 :(得分:3)
当EMF打开时,EclipseLink会保持与数据存储区的连接,即使EM已关闭,因此在关闭EMF之前,仍然可以加载延迟字段。这可以说是违反了JPA规范,许多人认为这是一种反模式。
其他JPA提供商将不这样做,因此,如果您希望100%符合JPA标准,则不应该依赖它并确保在EM关闭之前加载惰性字段。如果某个字段尚未被EM关闭,那么访问它可能会引发异常(取决于JPA提供者)。