当前位置: 首页 > 面试题库 >

在带有jpa / hibernate的Spring中,如何保持会话打开以避免懒惰的初始化异常?

苏阳州
2023-03-14
问题内容

我目前将实体Bean中的集合标记为渴望避免在使用EntityManager加载Bean之后尝试访问集合属性时避免出现惰性初始化异常。

如果我将集合留为延迟加载,如何保持会话打开?我曾考虑过尝试@Transactional,但即使这样行​​之有效,我也不想这样做,因为在较长的时间范围内保持事务开放似乎不正确。


问题答案:

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

基本上,您有几种选择。

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

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

普通的旧Servlet筛选器是最简单的。



 类似资料:
  • 我正在构建一个反向代理服务器,它将授权http请求并将其传递给一些内部API。 我根据DB中的条目授权传入请求。 这个项目中的性能是优先的——反向代理服务器不应该增加太多响应时间。 简而言之: 我正在使用来查询数据库。我在Spring配置中的init期间打开Hibernate会话: 然后我将会话注入DAO层,并在read方法中使用它: 正如您所看到的,我并不是在每次DAO调用中都关闭/打开会话。我

  • 我在想Spring中bean的懒惰初始化。对我来说,这里的“懒惰”是否意味着当一个bean被引用时会被创建并不十分清楚。 我认为Spring中的延迟初始化支持是不同的。我认为这是一个基于“方法调用”的惰性创建。我的意思是,每当对该方法调用任何方法时,都会创建该方法。 我认为这可以通过创建特定bean的代理实例并对任何方法调用进行初始化来轻松解决。 我是否遗漏了一些东西?为什么没有实施?这个概念有什

  • 当我试图懒洋洋地读取子实体列表时,我(断断续续地)得到了这个错误。 关于这个错误,我已经浏览了一个关于SO的帖子列表。我所能找到的就是执行EAGER fetch或使用属性。我不想做任何一个,因为他们是反模式。 我使用的是spring-data-jpa。这是一个spring-boot项目。请求来自web层(Rest控制器)

  • 问题内容: 创建单例的模式似乎是这样的: 但是我的问题是,如果Singleton构造函数执行的不是单元测试友好的操作,例如如何调用外部服务,jndi查找等,您如何使用这样的类进行单元化? 我想我可以像这样重构它: 现在的问题是,仅出于单元可测试性,我已强制将getInstance同步,因此仅出于测试方面,它将对实际应用程序产生负面影响。有没有解决的办法,由于Java中双重锁定模式的破坏性,似乎其他

  • 错误被抛出在行hibernate.initialize(students)上;或者在下一行,如果没有,在学生集上,标题中有错误。任何帮助(不仅仅是将fetch类型设置为Eager)都将不胜感激。

  • 当我从angular发送post请求时,在spring boot requestfilter程序中,验证jwt令牌时显示错误。 面对问题: 未能懒惰地初始化角色集合:in.yis.mains.model.opsuserslogin.roles,无法初始化代理-没有会话