【发布时间】:2011-04-04 08:03:57
【问题描述】:
首先我需要承认我是 EJB、JPA 和 Spring 的新手,所以我认为正确的许多事情都可能是错误的。
我正在构建一个 EJB 应用程序,其中有一个无状态会话 bean 用于检索许多 JPA (Hibernate) 实体。这个问题,我认为是一个普遍存在的问题,是当无状态返回任何实例时,我无法遍历这些实体的关系。我得到了可怕的 LazyInitializationException。在许多情况下,我发现使用 Eager fetching 可以避免异常,但这感觉更像是一种解决方法,而不是真正的修复。经过大量的谷歌搜索,我发现(因为我使用的是 spring)可能最侵入性的方法是使用 OpenSessionInViewInterceptor。
阅读this看起来好用,但是我无法映射文章中提到的文件。一种可能的解释是我使用的是 Spring 3,因此文件的名称可能已更改。我确实有一个 spring3app-servlet.xml 在其中声明了 bean。我还有一个设置过滤器的 web.xml(我相信这个文件在 spring 2.0 中使用过,但它仍然适用于 3.0)。
进一步的搜索让我意识到文件名不是我唯一关心的问题,因为我没有任何 SessionFactory bean,我相信这是它工作所必需的。这导致我搜索有关 SessionFactory bean 的信息。
该搜索让我意识到我可能需要 .hbm.xml 文件。我不确定这些文件是否真的需要,或者它们是否是旧版 hibernate-spring 版本所必需的。
tl;dr:我想要一个 OpenSessionInViewInterceptor。我需要一个 SessionFactory Bean 吗?我需要 .hbm.xml 文件吗?我在哪里可以找到所有设置信息?
编辑:
也许解决方案是使用 OpenSessionInViewFilter。我正在尝试使用它,但它仍然失败并出现同样的异常。我正在阅读 this 以寻求修复。
【问题讨论】:
标签: hibernate spring jpa ejb lazy-loading