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

Hap*_*eer 19 spring hibernate jpa lazy-loading

我目前在实体bean中标记集合,因为当我尝试在使用EntityManager加载bean之后尝试访问集合属性时,急于避免获得延迟初始化异常.

如果我将集合保留为延迟加载,如何保持会话打开?我想过尝试@Transactional,但即使这样有效,我也不想这样做,因为通过长方法保持事务处理是不对的.

luc*_*cas 9

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

基本上,你有几个选择.

- 您可以使用"在视图中打开会话"模式,您可以使用过滤器/拦截器/ AOP样式逻辑在服务器端逻辑开始时打开会话,并在它通过时关闭它.

- 您可以实现跨越多个请求 - 响应周期的对话.

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


JAR*_*ARC 5

似乎错过的最后一个选项是,您可以使用JOIN基于您的用例构建对象图.

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

如果您控制客户端(即您没有创建开放服务发布api),请使用此方法,因为您需要知道会话关闭时触摸的状态,因为事务已关闭.