我对何时在Spring应用程序中清除(休眠会话?)的一级缓存感到困惑。我正在执行一项很长的工作,该工作会读取大量数据,并且有时该应用程序的内存不足。 我以为缓存的对象正在引起问题。
最初,我认为关闭事务将强制清除缓存,并且在@Transactional(propagation=REQUIRES_NEW)
方法内从数据库中逐个读取条目将解决此问题。
但不幸的是,该应用程序仍会用完内存。
整个代码可能已经在事务内运行。休眠是否对多个事务或嵌套事务使用相同的缓存/会话?
我所有的选择都是通过spring存储库调用完成的(所以我没有直接使用实体管理器)。
是通过手动调用session.clear()或关闭最后一个父事务来清除缓存的唯一方法吗?