EclipseLink缓存refreshOnlyIfNewer不起作用

时间:2012-12-06 12:29:14

标签: jpa eclipselink

我正在尝试使用EclipseLink缓存。 我在persistence.xml中启用了shared-cache-mode = ENABLE_SELECTIVE,所以当我使用@Cacheable(true)时,实体会被缓存。现在,我希望在版本过时时使其工作,以便刷新enity。

我已设置乐观锁定字段

@Version
@Column(name="optLock")
private int versionNum ;

当我尝试保存具有旧版本号的实体然后数据库我将获得异常时,这是有效的。

所以当我添加注释以启用缓存和刷新

@Cacheable(true)
@Cache(size = 500, alwaysRefresh = true, refreshOnlyIfNewer = true)

实体不会被缓存。我启用了eclipselink.profiler,我可以看到没有为此实体创建缓存,并且缺少Counter:CacheHits和Counter:CacheMisses日志。

当我删除

@Cache(size = 500, alwaysRefresh = true, refreshOnlyIfNewer = true)

实体再次被缓存,但是直接在数据库中完成的任何更改(以及增加optLock字段)都不会通过。

我忘了她?或者我应该考虑什么来使这个工作?我一直在阅读的文档似乎应该有用。

1 个答案:

答案 0 :(得分:1)

@Cache覆盖@Cacheable,因为你没有在@Cache中启用缓存,它会获得持久性单元默认为不缓存。

添加,

@Cache(isolation=SHARED, ...)

到你的注释。

还请记录一个错误,EclipseLink应该足够智能以查看@Cacheable并将其用作默认设置,因为@Cache中没有隔离设置,或者至少报告警告。