2012-08-03 74 views
-1

我正在使用jQuery的UI,Struts2作为Action,JPA的数据访问层。我面临的问题是,当我试图从数据库检索值时,我得到了LazyInitializationException。我收到以下堆栈跟踪:JPA LazyInitializationException?

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.singpost.ctf.core.persistence.CtfTxn.ctfTxnAttribs, no session or session was closed 

默认情况下,Fetch="LAZY",代码工作正常,当我改变了获取类型EAGER,我不知道我有什么做进一步。我被困在中间。

+1

在stackoverflow上有关于此异常的几十个问题,以及其他网站上的更多问题。你有没有检查他们? – Bozho 2012-08-03 06:21:55

+0

@Bozho,因为我没有得到我想要的解决方案,所以只有我重新创建了这个主题。它不是我没有引用任何其他资源,并张贴在这里,我可以看到很多链接在屏幕右侧引用LazyInitializationException,但没有人帮助我 – Esh 2012-08-03 06:26:04

回答

1

如果您试图从实体访问延迟获取的属性JPA会尝试再次访问数据库以获取数据。您的问题是,此时您不在交易中。有很多方法可以扩展您的交易,例如使用的OpenSessionInViewFilter

Hibernate/Spring: failed to lazily initialize - no session or session was closed

什么,我个人更喜欢是创建传输对象,一个是要显示在每个网页,只包括必要的数据。您只需将您的实体映射到这些传输对象中,例如使用推土机映射器,这非常强大和方便。 这样管理事务变得更容易,其次你不用在你的前端使用数据库实体,因为你的前端不需要知道任何有关你的持久层的信息。

相关问题