-1

我使用 jquery 作为 UI , Struts2 作为 Action , 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",当我将 Fetch 类型更改为 时,代码工作正常EAGER,我不知道我还需要做什么。我被困在中间。

4

1 回答 1

1

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

休眠/弹簧:未能延迟初始化 - 没有会话或会话被关闭

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

于 2012-08-03T07:05:38.913 回答