我正在尝试将缓存与 EclipseLink 一起使用。我在我的 persistence.xml 中启用了 shared-cache-mode = ENABLE_SELECTIVE ,所以当我使用 @Cacheable(true) 时,实体会被缓存。现在我想让它在版本过时并且实体被刷新时工作。
我已经设置了一个乐观锁定字段
@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 字段)都不会通过。
什么我忘了她?或者我应该考虑什么才能让它工作?我一直在阅读的文档似乎应该可以正常工作。