首页 > 解决方案 > 在新线程中休眠延迟加载

问题描述

我有一个 Spring 应用程序,需要在用户登录时进行大量数据加载。为了让用户不必等待数据加载,我想异步加载。不幸的是,我依赖于一些延迟加载的对象来加载这些数据,这会导致 Hibernate 出现问题,因为新线程没有会话。

虽然我可以在主线程中加载对象并在加载所有字段后传递它们,但我宁愿避免这种冗长的方法。有没有办法在新线程中安全地加载这些惰性实体?或者可能,Spring 有没有办法在不必关闭当前线程的情况下向客户端返回响应?

标签: javadatabasespringmultithreadinghibernate

解决方案


我不能说这种方法是否是最佳解决方案,但是通过在用于到达新线程中延迟加载的对象的所有方法上使用 Spring 的 @Transactional-annotation,除了创建新线程的方法之外,我能够无需任何额外代码即可完成这项工作。

当然,急切地加载对象也是一种选择。由于我在 Spring 中使用 JPA 实现,我只需将 .getOne() 调用更改为 .findById() 调用。


推荐阅读