【发布时间】:2012-05-21 23:18:35
【问题描述】:
我正在开发一个使用 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 的分离实例可以解决问题,但我不知道如何在不合并对象(保留对其所做的任何更改)并将获取类型设置为 eager 的情况下做到这一点不是一个选项。
有什么方法可以惰性访问 A 中的 B、C 和 D 实体列表吗?
【问题讨论】:
标签: hibernate jsf-2 ejb-3.0 jpa-2.0