1樓:匿名使用者
一.主配置
◆查詢快取,同下面講的快取不太一樣,它是針對hql語句的快取,即完全一樣的語句再次執行時可以利用快取資料。但是,查詢快取在乙個交易系統(資料變更頻繁,查詢條件相同的機率並不大)中可能會起反作用:它會白白耗費大量的系統資源但卻難以派上用場。
◆fetch_size,同jdbc的相關引數作用類似,引數並不是越大越好,而應根據業務特徵去設定
◆batch_size同上。
◆生產系統中,切記要關掉sql語句列印。
二.hibernate session快取
1.資料庫級快取:這級快取是最高效和安全的,但不同的資料庫可管理的層次並不一樣,比如,在oracle中,可以在建表時指定將整個表置於快取當中。
2.session快取:在乙個hibernate session有效,這級快取的可干預性不強,大多於hibernate自動管理,但它提供清除快取的方法,這在大批量增加/更新操作是有效的。
比如,同時增加十萬條記錄,按常規方式進行,很可能會發現outofmemeroy的異常,這時可能需要手動清除這一級快取:session.evict以及 session.
clear
3.應用快取:在乙個sessionfactory中有效,因此也是優化的重中之重,因此,各類策略也考慮的較多,在將資料放入這一級快取之前,需要考慮一些前提條件:
◆資料不會被第三方修改(比如,是否有另乙個應用也在修改這些資料?)
◆資料不會太大
◆資料不會頻繁更新(否則使用cache可能適得其反)
◆資料會被頻繁查詢
◆資料不是關鍵資料(如涉及錢,安全等方面的問題)。
hibernate session快取有幾種形式,可以在對映檔案中配置:read-only(唯讀,適用於很少變更的靜態資料/歷史資料),nonstrict-read- write,read-write(比較普遍的形式,效率一般),transactional(jta中,且支援的快取產品較少)
4.分布式快取:同3)的配置一樣,只是快取產品的選用不同,在目前的hibernate中可供選擇的不多,oscache, jboss cache,目前的大多數專案,對它們的用於集群的使用(特別是關鍵交易系統)都持保守態度。
在集群環境中,只利用資料庫級的快取是最安全的。
三.延遲載入
◆實體延遲載入:通過使用動態**實現
◆集合延遲載入:通過實現自有的set/list,hibernate提供了這方面的支援
2樓:姑遂向觸
hibernate中session 是hibernate中的快取物件 用此session運算元據庫後會快取返回的結果在session裡面 當你再次運算元據庫的時候 如果session快取裡面有相應的值 則不用去與資料庫互動直接返回結果
servlet 中的session 也是快取 其快取你與伺服器對話時候的一些資訊
總之所有的session基本都是起快取作用的 就是把一些資訊快取在記憶體中 方便訪問值
但是不同的session是不能相互直接賦值的 因為是兩個不同的概念 只是名字一樣
名字一樣也是為了幫助程式設計師理解 學了servlet的session 後再遇到session也就應該是快取作用的
不知道我的回答你滿意不
3樓:匿名使用者
hibernate中session是資料庫的乙個連線,乙個session就是乙個連線,相當於jdbc。connection。平時的session是使用者的會話,記錄使用者的資訊
Hibernate中如何對存在複合主鍵的表進行查詢
如果生成這兩個類,說明你的person表裡面有聯合主鍵 你直接用person這個po查就可以了 直接查詢主表 from person 就可以了.根據主鍵 查詢單個實體.personid id new personid id.seta id.setb session.findbyid person.c...
使用hibernate的優缺點,hibernate的優缺點,盡量全面點。3Q
優點是物件導向,使程式設計師不必在關注資料庫語句。缺點是,很難學,而且要做對映,自然就浪費掉一些資源嗯,什麼事單雙向關係?你說得是層級關聯還是一對多 多對多?快取機制 分為兩種,一種是一級快取,就是hibernate自帶的session,第二就是二級快取,是外接的。第一種快取只是簡單的記錄了查詢結果...
Hibernate的快取是在何時清除的
session會在下面的時間點清理快取 1 當應用程式呼叫org.hibernate.transaction的commit 方法的時候 commit 方法先清理快取,然後再向資料庫提交事務。2 當應用程式執行一些查詢操作時,如果快取中持久化物件的屬性已經發生變化,就會先清理快取,使得session快...