Hibernate 多节点环境下spring数据缓存返回陈旧数据

Hibernate 多节点环境下spring数据缓存返回陈旧数据,hibernate,spring-data,ehcache,spring-data-jpa,Hibernate,Spring Data,Ehcache,Spring Data Jpa,使用下面的代码,ehcache不能反映多节点JVM环境中的最新数据。相反,spring数据存储库方法返回陈旧数据。返回最新数据的代码缺少什么?下面的Foo-JPA存储库中的findByName方法返回陈旧数据。第一次调用时,它缓存数据。在timeToLiveSeconds之后的后续调用中,即使数据库中实体的数据发生了更改,我仍然会得到相同的缓存数据。我预计timeToLiveSeconds将导致缓存过期,并在后续调用中重新加载数据。 在接收db update调用的节点1上,缓存按预期进行更新。i

使用下面的代码,ehcache不能反映多节点JVM环境中的最新数据。相反,spring数据存储库方法返回陈旧数据。返回最新数据的代码缺少什么?下面的Foo-JPA存储库中的findByName方法返回陈旧数据。第一次调用时,它缓存数据。在timeToLiveSeconds之后的后续调用中,即使数据库中实体的数据发生了更改,我仍然会得到相同的缓存数据。我预计timeToLiveSeconds将导致缓存过期,并在后续调用中重新加载数据。 在接收db update调用的节点1上,缓存按预期进行更新。i、 findByName方法返回最新的数据。对另一个节点的相同调用返回陈旧数据。即使是在时间流逝之后

//实体类 @实体 @SecondaryTablename=foo_内容 @Cacheusage=CacheConcurrencyStrategy.READ\u ONLY 福班{ @身份证 @GeneratedValuegenerator=测试 @GenericGeneratorname=测试,策略=序列, parameters={@Parametername=sequence,value=hibernate\u seq} 私钥; @NotNull私有字符串名称; 私有int版本; @NotNull @高球 @Columntable=foo_内容 私有字符串内容; } //Foo JPA存储库: 公共接口FooRepository扩展了JpaRepository{ @查询从foo-foo中选择foo,其中foo.name=?1,foo.version=从foo-t中选择MAXt.version,其中t.name=?1 @QueryHints{@QueryHintname=org.hibernate.cacheable,value=true}Foo findByNameString name; } ehcache.xml

jpaPropertyMap属性

符合事实的 禁用_选择性 org.hibernate.cache.EhCacheProvider META-INF/com/blah/blah/ehcache.xml
正如线程中所讨论的,这似乎是一个bug,相应的记录单是关闭的,因为缺少测试用例

所以这是一个仍然存在的错误。解决方法可能是扩展UpdateTimestampsCache类以重写IsUpdate方法。我可能很快就会尝试并发布更新

更新:我使用的Hibernate版本是3.5.2,我同意它的旧版本。此版本不允许按线程插入自定义UpdateTimestampsCache。由于应用程序的影响,到目前为止,我还没有升级到最新hibernate版本的计划