標籤:res path 實體 clear ssi 屬性 返回 target 資料庫查詢
hibernate一級緩衝
1.Hibernate一級緩衝又稱為“Session緩衝”,“會話級緩衝”。
2.通過Session從資料庫查詢實體時會把實體在記憶體中儲存起來,下一次查詢同一實體時不再從資料庫擷取,而是從記憶體中擷取,這就是緩衝
3.一級緩衝的生命週期和Session相同,Session銷毀,它也銷毀。
4.一級緩衝中的資料可適用範圍在當前會話之內。
管理一級緩衝的API
1.evict(),用於將某個對象從Session的一級緩衝中清除。
2.clear(),用於將一級緩衝中的所有對象全部清除。
Qurey.list()和Qurey.iterate()
1.Qurey.list()查詢資料,不會從緩衝中尋找,直接向資料庫發送sql語句,將查詢返回的對象保留在緩衝中。
2.Qurey.iterate()直接向資料庫發送sql,查詢id,當需要使用對象其他屬性的時候,先在緩衝中根據id尋找對象,如果沒有則向資料庫發送sql查詢,因此單獨用該方法查詢會產生N+1問題(即向資料庫發送N+1條語句查詢N個對象的資訊)
hibernate二級緩衝(SessionFactory緩衝)
1.添加在hibernate.cfg.xml裡面的配置
<!-- 開啟二級緩衝 --> <property name="hibernate.cache.use_second_level_cache">true</property> <!-- 二級緩衝的提供類 在hibernate4.0版本以後我們都是配置這個屬性來指定二級緩衝的提供類--> <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property> <!-- 二級緩衝設定檔的位置 --> <property name="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</property>
2.配置ehcache.xml具體見http://www.cnblogs.com/kundeg/p/7172428.html
3.通過注釋配置entity,在類前加上@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
CacheConcurrencyStrategy屬性值常見的有READ_ONLY(對該entity對應的表資料唯讀取然後緩衝)和READ-WIRTE(對錶資料可以讀取也可以更新)
4,一定要注意:hibernate二級緩衝的必須是整個對象,如果查詢的只是對象某些屬性,那麼該對象不會被緩衝
hibernate的三種狀態(transient(瞬時狀態),persistent(持久化狀態)以及detached(離線狀態))
詳情見http://www.cnblogs.com/xiaoluo501395377/p/3380270.html
hibernate緩衝機制