Hibernate会发出许多延迟的初始化异常,但是EclipseLink不会。分离实体并尝试访问未初始化的属性时,将发生异常。但这不是EclipseLink的问题。 EclipseLink如何不同地处理它?</ p>
例如
public class Employee {
@OneToMany(fetch=FetchType.LAZY)
private List<Task> tasks;
}
Employee employee = em.find(Employee.class, 1);
em.detach(employee);
employee.getTasks(); // exception here
答案 0 :(得分:0)
我还没有使用过EclipseLink,但是已经了解了LazyInitializationException
导致Hibernate的原因,我可以说EclipseLink与Hibernate处理lazy
加载关系的方式不同。
您可以在此处找到有关此问题的一些答案:
和直接向上的Google搜索将显示更多结果。
主要思想是,即使在EntityManager关闭之后,EclipseLink仍允许您访问惰性关系。据我所读,这是EclipseLink特定的行为,也是JPA的一部分。另一方面,Hibernate需要打开一个会话才能初始化代理并访问惰性关系。
如果不存在,则会引发异常。如果您使用的是Spring,则始终可以使用@Transactional
来注释需要懒惰关系的访问方法,以确保可以使用会话。