MessageConverter 中带有 @Transactional 注释的 LazyInitializationException

发布于 2024-09-01 19:22:46 字数 607 浏览 4 评论 0原文

我有一个通过 Spring-MVC 公开的 REST 服务。我有一个特定的方法,它被正确映射并通过 HTTP 调用进行调用。我的 Spring 应用程序包含 HibernateTransactionManager ,并且事务是通过 @Transactional 注释配置的。我这样注释该方法:

@Transactional(readOnly = true)
@Override
@RequestMapping(value = "/start", method = RequestMethod.GET)
@ResponseBody
public List<SomeObject> start(....)

每当我调用 HTTP 方法时,我都会从我的 org.springframework.http.converter.json.MappingJacksonHttpMessageConverter 中得到一个 org.hibernate.LazyInitializationException 异常,它是绑定在我的应用程序上下文中。 @Transactional 注释对于 MessageConverter 也有效吗?

I have a REST-service exposed through Spring-MVC. I have a particular method which is correctly mapped and called through a HTTP-call. My Spring application contains the HibernateTransactionManager and transactions are configured through @Transactional-annotations. I annotated the method like this:

@Transactional(readOnly = true)
@Override
@RequestMapping(value = "/start", method = RequestMethod.GET)
@ResponseBody
public List<SomeObject> start(....)

Whenever I call the HTTP-method I a org.hibernate.LazyInitializationException from my org.springframework.http.converter.json.MappingJacksonHttpMessageConverter which is bound in my application context. Is the @Transactional annotation valid for the MessageConverter as well?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梓梦 2024-09-08 19:22:46

您的转换器类显然正在读取一个配置为在 Hibernate 配置中延迟收集的字段。

两种可能的解决方案:

  • 扩展您的事务方法以包括转换器方法。
  • 编辑 Hibernate 配置以立即获取导致 LazyInitializationException 的字段。 (例如,该字段可以是数据库中两个表之间关系的一部分。)

Your converter class is obviously reading a field that's configured to be collected lazily in your Hibernate configuration.

Two possible solutions:

  • Expand your transactional method to include the converter method.
  • Edit your Hibernate configuration to eagerly fetch the field that's responsible of the LazyInitializationException. (This field can for example be a part of a relationship between two tables in the database.)
还给你自由 2024-09-08 19:22:46

LazyInitializationException 意味着当您尝试读取实体上未初始化的数据时,您的休眠Session 已关闭。

您可以通过

  • 以下方法解决此问题: 延长会话的生命周期(使用 OpenSessionInView
  • 预初始化服务方法中的实体,使用 Hibernate.initialize(entity)

LazyInitializationException means that your hibernate Session is closed at the time you try to read uninitialized data on your entity.

You can fix this by:

  • either extending the lifetime of the session (using OpenSessionInView
  • pre-initialize the entity in your service method, using Hibernate.initialize(entity)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文