我们在基于 JPA(Hibernate)的应用程序中使用 Infinispan(使用 JGroups 集群)作为我们的二级缓存。当数据库操作失败时,我们会看到二级缓存是陈旧的。例如:
1) 尝试使用登录名“joe”创建用户。2) 调用persist(user);3) 由于数据库唯一性约束,持久化失败。4) 在 login=joe 上按 id 查找(假设 login 是 PK)。5) Hibernate 从 Infinispan 缓存返回 joe 用户,即使数据库没有它。
在这种情况下,配置 XA 事务并让 Infinispan 参与 XA 似乎有点矫枉过正。XA 是解决这个问题的唯一方法吗?