【问题标题】:JPA LazyInitializationException?JPA 延迟初始化异常?
【发布时间】:2012-08-01 04:21:22
【问题描述】:

我在 UI 中使用 jquery,在 Action 中使用 Struts2,在数据访问层中使用 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 时,代码工作正常,我不知道我还需要做什么。我被困在中间了。

【问题讨论】:

  • 在 stackoverflow 上有很多关于这个异常的问题,在其他网站上还有更多问题。你检查过其中任何一个吗?
  • @Bozho,因为我没有得到我想要的解决方案,所以只有我重新创建了主题。并不是说我没有参考任何其他资源并在此处发布,我可以在屏幕右侧看到很多指向 LazyInitializationException 的链接,但没有一个对我有帮助

标签: java hibernate jpa-2.0 ejb-3.0 lazy-initialization


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-27
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多