我想禁用休眠緩存。休眠禁用緩存
session.setCacheMode(CacheMode.IGNORE)
不起作用。
query.setCacheable(false)
也不起作用。
另外,我可以以某種方式配置緩存不會爲對象X,Y完成,但會爲對象Z完成嗎?
謝謝。
我想禁用休眠緩存。休眠禁用緩存
session.setCacheMode(CacheMode.IGNORE)
不起作用。
query.setCacheable(false)
也不起作用。
另外,我可以以某種方式配置緩存不會爲對象X,Y完成,但會爲對象Z完成嗎?
謝謝。
我搜查了網頁,結論是確實無法禁用會話緩存。 這很奇怪。 我自己的解決方案是使用session.clear()當我想清除緩存。
不起作用,我已經嘗試過session.clear(); 仍然直接數據庫更新不顯示在休眠狀態。 請讓我知道,如果你已經找到了別的東西。 –
爲我工作。您也可以嘗試關閉並打開新的會話。 –
配置你的hibernate session工廠時嘗試類似的東西:
configuration.setProperty(Environment.USE_QUERY_CACHE, Boolean.FALSE.toString());
configuration.setProperty(Environment.USE_SECOND_LEVEL_CACHE, Boolean.FALSE.toString());
configuration.setProperty(Environment.CACHE_REGION_FACTORY,org.hibernate.cache.impl.NoCachingRegionFactory.class.getName());
configuration.setProperty(Environment.CACHE_PROVIDER,org.hibernate.cache.NoCacheProvider.class.getName());
但是請注意,你無法禁用會話緩存是由Hibernate的(如果不是所有的JPA實現)提供。如果你真的不想被Hibernate緩存,你可以驅逐它或不使用休眠(對你更簡單)
至於緩存特定的實體,我建議你看看javax.persistence.Cacheable和看看這對你有用。
你確定沒有辦法禁用會話緩存嗎?似乎很奇怪..如果我想在變更之前和之後comapre DB對象怎麼辦?是唯一的毒藥是使用驅逐嗎? – AAaa
我很確定......當你處理Hibernate實體時,你正在處理會話的
在從管理器獲取可重用會話對象之前,您可以致電session.clear()
。
I.e.在我們的項目中,我們必須在許多休眠會話(每個http會話一次)之間同步更新。二級緩存工作正常,但第一級(每個會話)必須禁用或清除。因此,我們創建了SessionManager,它存儲所有會話並按需交付。在撥打電話session.clear()
之前,這就解決了這個問題。
直到你在做你的工作單元 - 第一級緩存是好的。
您可以更具體地瞭解您所指的哪個* hibernate緩存?有會話/第一級緩存,第二級緩存,查詢緩存和集合緩存。 –
我指的是會話緩存 – AAaa