gpt4 book ai didi

java - 当 Spring 请求过滤器中加载对象时,Hibernate session 将关闭

转载 作者:太空宇宙 更新时间:2023-11-04 11:38:43 24 4
gpt4 key购买 nike

我有一个AuthenticationFilter,它从 HTTP 请求中读取 token ,从数据库加载用户对象并将其设置为 SecurityContextHolder:

SecurityContextHolder.getContext().setAuthentication(resultOfAuthentication);

现在,在 Controller 类的请求处理程序中,我想访问延迟加载的用户对象的字段。问题是我收到 LazyInitializationException 因为 session 已关闭:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: a.b.c.User.devices, could not initialize proxy - no Session

有什么想法可以让 session 保持打开状态直到请求完成吗?这样我就可以延迟加载用户对象的字段?

最佳答案

您必须将该调用包含在 @Transactional 方法中,或者将事务边界移至调用层次结构中的更高位置,以便也包含该调用。

其他选项是:

  • 在 session 仍处于打开状态时立即获取所有必需的依赖项(join fetch)
  • 在事务上下文中使用 Hibernate.initialize(user.getAddresses());
  • 只需调用依赖集合上的 size 方法来初始化它们user.getAddresses().size:

关于java - 当 Spring 请求过滤器中加载对象时,Hibernate session 将关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43010147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com