hibernate緩存清除(轉)


文章有點雜,這不是原文,謝謝貢獻者

http://www.360doc.com/content/16/0413/16/32415095_550307388.shtml

一、hibernate一級緩存
(1)hibernate支持兩個級別的緩存,默認只支持一級緩存;

(2)每個Session內部自帶一個一級緩存;
(3)某個Session被關閉時,其對應的一級緩存自動清除;
(4)save、update、saveOrupdate、load、get、list、iterate、lock方法都會向緩存中存對象.
(5)可以從緩存中讀數據的只有: get、load、iterate
(6)Query對象默認情況下不讀緩存,如果要使其支持緩存,則要通過語法:
query.setCacheable(true);
<property name="cache.use_query_cache">true</property>
(7)打開query緩存后,只有查詢條件與以前的查詢完全相同時,才會在緩存中匹配成功.
(8)Criteria對緩存支持不足;
(9)一級緩存不能控制緩存中的對象數量,要注意大批量操作數據時可能造成的內存溢出,可以利用清除緩存.
     session.clear()  清除緩存中所有對象
     session.evict(user) 清除指定對象


二、hibernate二級緩存
* save、update、saveOrupdate、load、get、list、query、Criteria方法都會填充二級緩存
* get、load、iterate會從二級緩存中取數據
* session.save(user)   如果user主鍵使用“native”生成,則不放入二級緩存.

(1)開啟二級緩存
<property name="cache.use_second_level_cache">true</property>

(2)為hibernate指定二級緩存的實現類
<property name="cache.provider_class">
    org.hibernate.cache.OSCacheProvider
</property>

(3)為OSCache緩存創建配置文件(需要hibernate_Advance_Surpport_lib)
src/oscache.properties
修改配置中的:
cache.capacity=1000  指定緩存可以容納多少對象


(4)指明哪些類需要放入二級緩存,需要長期使用到的對象才有必要放入二級緩存
<class-cache class="entity.PetInfo" usage="read-only" /> //不允許更新緩存中的對象
<class-cache class="entity.PetInfo" usage="read-write" />  //允許更新緩存中的對象

或在orm文件中:
<class name="entity.PetInfo" table="PetInfo" schema="dbo" catalog="epet">
   <cache usage="read-only"/>
   ...
</class>

(5)如果需要清除二級緩存,使用下面語法
    sessionFactory.evict(User.class)  清除所有user
    sessionFactory.evict(User.class,Id)  清除指定user


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM