【发布时间】:2009-10-01 19:22:35
【问题描述】:
我有一个使用 JPA、Hibernate 和 ehcache 以及 Spring 的声明式的应用程序 交易。 DB 上的负载相当高,因此所有内容都被缓存以加快速度, 包括收藏。现在集合单独缓存已经不是什么秘密了 从拥有它们的实体中,所以如果我删除一个作为此类元素的实体 缓存集合,持久化一个应该是一个元素的实体,或者更新一个 实体,使其从一个集合传播到另一个集合,我必须执行驱逐 手工。
所以我使用了一个休眠事件监听器来跟踪被插入、删除的实体 或更新并保存该信息以用于向 Spring 注册的事务同步 交易管理器采取行动。同步然后执行驱逐一次 事务已提交。
现在的问题是很多时候,其他一些并发事务设法找到 缓存中刚刚被驱逐的集合(这些事件通常是十分之一 根据日志分开第二个),自然会导致 EntityNotFoundException 发生。
如何正确同步这些东西?
我尝试在 TransactionSynchronization 的 4 种方法中的每一种中进行驱逐(其中 在相对于事务完成的不同时间点调用),它没有帮助。
【问题讨论】:
标签: java hibernate collections transactions ehcache