文章有點雜,這不是原文,謝謝貢獻者
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
(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