几天来,我一直在调试我的代码中的一些奇怪的环境行为,并且偶然发现了一些让我感到惊讶的东西。我已经确认这不会导致我的问题,但我认为无论如何检查我的假设是值得的。
如果我在单个线程的多个位置获取当前的 Hibernate 会话(我正在使用线程会话上下文),我将始终获得相同的会话,因此我将访问相同的一级缓存。
在获取审计阅读器实例时,我假设与 envers 有类似的行为。我AuditReader reader = AuditReaderFactory.get(session);
用来获取AuditReader
实例。我注意到每次调用它(即使在同一个会话上下文中)我都会得到一个新的审计读取器实例,其中包含一个唯一的第一级缓存实例。
看起来这充其量会导致多个可能重叠的缓存的性能下降。
我曾假设,对于会话上下文,我总是会获得相同的AuditReader
实例,因此会获得一个一级缓存。我想不出为什么不是这种情况的原因。
这给我留下了四种可能性:
- 我没有使用正确的方法来获取会话上下文的审核阅读器
- 拥有多个审计阅读器实例是有充分理由的
- 在环境深处的某个地方有一个错误
- 重用审计阅读器实例是没有意义的。
有人可以对此提供一些见解。
谢谢。