在使用JPA/Hibernate的Spring中,如何保持会话打开以避免延迟初始化异常?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

我目前在实体Bean中标记集合,以避免在使用EntityManager加载bean后尝试访问集合属性时出现延迟初始化异常。

如果我将该集合作为延迟加载离开,我该如何保持会话打开?我想过尝试@Transactional,但即使这样做,我也不想这样做,因为通过长期的方法让事务处于打开状态似乎不合适。

提问于
用户回答回答于

https://www.hibernate.org/43.html

基本上,你有几个选择。

- 当服务器端逻辑开始时,你可以使用“打开会话视图”模式,在此模式下使用过滤器/拦截器/ AOP样式的逻辑来打开会话,并在通过时关闭会话。

- 你可以实施跨越多个请求 - 响应周期的对话。

一个普通的旧Servlet过滤器是最简单的。

用户回答回答于

似乎错过了最后一个选项,你可以使用JOIN根据您的用例构建对象图。

这将导致对象被初始化,即不会是代理。

如果你控制客户端(即,您不创建开放服务发布api),请使用此方法,因为你需要知道由于事务已关闭而关闭会话时会触摸什么状态。

扫码关注云+社区