【问题标题】:Hibernate is not throwing LazyInitializationException in Spring Boot ProjectHibernate 不会在 Spring Boot 项目中抛出 LazyInitializationException
【发布时间】:2018-04-03 07:00:27
【问题描述】:

我使用 Hibernate 5.0 处理 Spring Boot 项目。不幸的是,即使在事务提交之后,Hibernate 也不会抛出 LazyInitializationException 来读取延迟初始化的对象。如何在事务之外启用LazyInitializationException

(当前行为隐藏了代码中的错误。)

【问题讨论】:

  • 请给我们一些细节;启用 showSql 选项并查看 hibernate 发出的查询,看看是否在事务期间检索了惰性字段。
  • 你确定惰性对象真的被初始化了吗?
  • 延迟加载与事务无关,而是EntityManager 的生命周期默认情况下对整个请求保持打开状态(请参阅下面 Babtiste 的回答)。您能否详细说明“隐藏错误”声明?为什么能够调用返回正确结果的方法是一个错误?

标签: java spring hibernate jpa


【解决方案1】:

Spring boot 有一个属性 spring.jpa.open-in-view,默认值为 true。这将注册一个OpenEntityManagerInViewInterceptor,它将在整个请求中保持事务处于活动状态。

尝试将其添加到您的 application.properties 文件中:

spring.jpa.open-in-view=false

A discussion about it on GitHub

Some documentation about Spring Boot properties

希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 2020-12-27
    • 2011-12-21
    相关资源
    最近更新 更多