不同提供程序的JPA延迟初始化异常

时间:2018-06-22 21:02:21

标签: hibernate jpa eclipselink

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

1 个答案:

答案 0 :(得分:0)

我还没有使用过EclipseLink,但是已经了解了LazyInitializationException导致Hibernate的原因,我可以说EclipseLink与Hibernate处理lazy加载关系的方式不同。

您可以在此处找到有关此问题的一些答案:

和直接向上的Google搜索将显示更多结果。

主要思想是,即使在EntityManager关闭之后,EclipseLink仍允许您访问惰性关系。据我所读,这是EclipseLink特定的行为,也是JPA的一部分。另一方面,Hibernate需要打开一个会话才能初始化代理并访问惰性关系。

如果不存在,则会引发异常。如果您使用的是Spring,则始终可以使用@Transactional来注释需要懒惰关系的访问方法,以确保可以使用会话。