我正在开发一个使用 JBoss 6.1.0.Final、JSF 2.0.3、EJB3 和 JPA 2 + Hibernate 3.3 的项目。
一个 JSF 页面显示了一个输入实体 A 数据的表单,同时它还有一个与该实体 A 关联的 B、C 和 D 实体列表。其中一个列表在加载表单时显示,其中一个是一个抛出 LazyInitializationException 因为没有会话或会话已关闭。
经过一些 SO & Google 浏览后,我尝试了一些答案,以及将 EntityManager 保留在视图中的模式,但这些都不够。Spring 有一个 org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor 似乎可以处理这种情况 AFAIK 但我可能是错的。
执行访问列表的任何方法时都会引发异常:
IA entityA = business.getListOfAs();// In AListBean
然后,在我做的表格上:
entityA.getListofB(); //LazyInitializationException
获取 A 记录后,我不会立即访问列表,中间有一些导航导致会话在我获取 B 项目列表之前关闭。
重新附加 A 的分离实例可以解决问题,但我不知道如何在不合并对象(保留对其所做的任何更改)并将获取类型设置为渴望的情况下做到这一点。
是否有任何方法可以以惰性方法访问 A 中的 B、C 和 D 实体列表?