2012-12-06 98 views
0

我試圖在EclipseLink中使用緩存。 我在persistence.xml中啓用了shared-cache-mode = ENABLE_SELECTIVE,所以當我使用@Cacheable(true)時,實體獲得緩存。現在我想在版本過期時使其工作,並且刷新狀態。EclipseLink緩存refreshOnlyIfNewer不能正常工作

我設置一個樂觀鎖定領域

@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

@Cache覆蓋@Cacheable,因爲您沒有在@Cache中啓用緩存,所以持久性單元默認爲不緩存。

添加,

@Cache(isolation=SHARED, ...) 

到您的註釋。

請記錄一個錯誤,EclipseLink應該足夠聰明以查看@Cacheable並將其用作默認值,因爲@Cache中沒有隔離設置,或者至少報告警告。