2015-12-22 51 views
0

我知道,如果在持久存儲中發生任何更新,L2高速緩存無法自行更新。那麼,我應該在DAO層的每個寫入或更新方法之後調用evict2ndLevelCache()方法嗎?或者有更好的策略?休眠:使第二級高速緩存無效

http://howtodoinjava.com/2013/07/02/how-hibernate-second-level-cache-works/

如果某些用戶或進程直接在數據庫中的變化,有 沒有辦法,二級緩存更新自己,直到 「timeToLiveSeconds」時間已經過去了高速緩存區域。在這個 的情況下,最好是使整個緩存無效,並讓hibernate 再次構建它的緩存。你可以使用下面的代碼片段 使整個hibernate二級緩存失效。

+0

[當另一個進程修改數據庫時Hibernate二級高速緩存失效]的可能重複(http://stackoverflow.com/questions/1603846/hibernate-2nd-level-cache-invalidation-when-another-process-modifies-該數據庫) – Tarik

+0

嗨,鏈接還提供了一個示例驅逐方法。我擔心它的使用?那麼我的理解是否正確:每個更新方法後面跟着一個驅逐方法調用? – Forkmohit

回答

1

如果你正在做Hibernate實體本身的改變,你不需要做任何事情來確保二級緩存的一致性,Hibernate會照顧它。

如果您通過本機查詢進行更改,則明確提及哪些實體會受到影響,否則Hibernate將使整個二級緩存失效,如解釋here所述。

如果您要從另一個進程更改數據庫中的數據,那麼Hibernate不會意識到它,您將不得不定義一個最適合您需求的策略(過期策略,從應用程序外部調用的顯式失效等)。