我有一个 Spring 应用程序,需要在用户登录时执行大量数据加载。为了让用户不必等待数据加载,我想异步加载它。不幸的是,我依赖一些延迟加载的对象来加载这些数据,这会导致 Hibernate 出现问题,因为新线程没有 session 。
虽然我可以在主线程中加载对象并在加载所有字段后传递它们,但我宁愿避免这种冗长的方法。有没有办法在新线程中安全地加载这些惰性实体?或者,Spring 有没有办法在不关闭当前线程的情况下向客户端返回响应?
最佳答案
我不能说这种方法是否是最佳解决方案,但是除了创建新线程的方法之外,通过在新线程中用于到达延迟加载对象的所有方法上使用 Spring 的 @Transactional-annotation,我无需任何额外代码即可完成这项工作。
当然,急切地加载对象也是一种选择。由于我在 Spring 中使用 JPA 实现,因此我只需将 .getOne() 调用更改为 .findById() 调用即可。
关于java - Hibernate 在新线程中延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56825862/