2011-12-28 79 views
1

Hibernate 3.3,ehCache 2.4.7,C3P0 0.9.1.2,MySQL(確認查詢緩存關閉)無法從查詢和二級緩存中獲得一致的返回結果 。Hibernate第二級緩存返回陳舊數據(有時)

插入一個新對象並隨後獲取該對象有時(大約1比4)無法返回插入的對象。我可以通過直接的數據庫查詢確認插入正在工作。

插入實體這樣的註釋:@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)

這是在主鍵findById查詢(這是一個字符串,用戶名,因爲它是一個新的用戶創建過程)失敗。

成功並調用所有後續調用時,緩存命中將清除,並且不會按照預期觸發查詢。

有兩個可疑的問題:

  • stats.getSecondLevelCacheStatistics的實體類型顯示在緩存中的 對象,但高速緩存未命中記錄。
  • 查詢顯示在高速緩存未命中之後觸發,但它返回陳舊 數據(在這種特殊情況下,一個空列表作爲插入不 返回)

我期望插入到確保它進入緩存,或者即使沒有工作,錯過了緩存命中,然後是正確的查詢。然而,無法將對象放入緩存中,以及隨後的失敗查詢是令人煩惱的組合。

回答

0

希望這不是因爲您設置的會話FlushMode。如您所知,如果使用FlushMode.COMMITFlushMode.MANUAL(並且未調用手動刷新),則可能會收到過時的對象。

+0

我應該提到的 - 我沒有檢查,它仍然被設置爲默認值('FlushMode.AUTO') – 2011-12-28 19:28:48

相關問題