Hibernate級聯關係的說明和優化
今天接到一個公司的電話面試,裡面問道Hibernate的級聯,很失敗,竟然回答的吞吞吐吐的,失敗。前幾天剛剛做了,看開做東西要仔仔細細,馬虎問題大。
說說級聯吧:
========================INVERSE===============================
Hibernate裡面的inverse 有兩個值 true ,false ;
inverse的意思是翻轉,這裡面理解為對對應表的的維護
http://space.itpub.net/22259926/viewspace-631423
裡面說的,如果inverse為false的化,delete不會修改order表單,即對應關係沒有維護。但是新增的時候,會增加order表單,
下面是轉載的,
========================CASCADE===========================
cascade 有五個選項 分別是: all ,delete ,none,save-update,delete-orphan ;
all : 所有情況下均進行關聯操作。
none:所有情況下均不進行關聯操作。這是預設值。
save-update:在執行save/update/saveOrUpdate時進行關聯操作。
delete:在執行delete時進行關聯操作。
delete-orphan: 當save/update/saveOrUpdate時,相當於save-update ;當刪除操作時,相當於delete ;
all的意思是save-update + delete
all-delete-orphan 的意思是當物件圖中產生孤兒節點時,在資料庫中刪除該節點
all比較好理解,舉個例子說一下all-delete-orphan:
Category與Item是一對多的關係,也就是說Category類中有個Set型別的變數items.
舉個例子,現items中存兩個Item, item1,item2,如果定義關係為all-delete-orphan
當items中刪除掉一個item(比如用remove()方法刪除item1),那麼被刪除的Item類例項
將變成孤兒節點,當執行category.update(),或session.flush()時
hibernate同步快取和資料庫,會把資料庫中item1對應的記錄刪掉
========================LAZY===========================
結論1: HQL程式碼 > fetch(配置) > lazy (配置)
結論2: 預設 lazy="true"
結論3: fetch 和 lazy 主要是用來級聯查詢的,
fetch引數指定了關聯物件抓取的方式是select查詢還是join查詢,select方式時先查詢返回要查詢的主體物件(列表),再根據關聯外來鍵id,每一個物件發一個select查詢,獲取關聯的物件,形成n+1次查 詢; 而join方式,主體物件和關聯物件用一句外來鍵關聯的sql同時查詢出來,不會形成多次查詢。
如果你的關聯物件是延遲載入的,它當然不會去查詢關聯物件。 另外,在hql查詢中配置檔案中設定的join方式是不起作用的(而在所有其他查詢方式如get、criteria或再關聯獲取等等都是有效的),會使用select方式,除非你在hql中指定join fetch某個關聯物件。fetch策略用於定義 get/load一個物件時,如何獲取非lazy的物件/集合。 這些引數在Query中無效。
========================batch-size==============================
今天有個問題,就是一對多查詢時候,比如Customer裡面包含了太多Order表單怎麼優化?當時懵了
其實可以使用Hibernate的延遲載入功能,即時Lazy=true,只有在真正需要的時候,才去從資料庫載入“本體”,Customer的某個Order,只用當該Order真正需要時候的,採取從資料庫載入
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-659765/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- hibernate(六) cascade(級聯)和inverse關係詳解
- Hibernate關聯關係
- Hibernate 的關聯關係對映
- 超級簡單的例子說明JAVA PACKET CLASS 和變數之間的關係Java變數
- Oracle sessions,processes 和 transactions 引數 關係 說明OracleSession
- 樹形或級聯關係
- Hibernate 實體關聯關係對映—-總結薦
- [AI開發]一個例子說明機器學習和深度學習的關係AI機器學習深度學習
- hibernate 關係對映之 主鍵關聯一對一
- SQL優化--多表連線和走索引的關係SQL優化索引
- 關於DOCTYPE的使用和說明
- 優思學院|一圖說明APQP的過程和五大質量管理工具的關係
- 表的關聯關係
- [全程建模]業務建模和用例模型以及需求規格說明書的關係模型
- Hibernate常用API以及使用說明API
- mySQL優化, my.ini 配置說明MySql優化
- Mongoose使用population建立關係連結例項說明Go
- 3分鐘短文:說說Laravel模型關聯關係最單純的“一對一”Laravel模型
- Oracle arraysize 和 fetch size 引數 與 效能優化 說明Oracle優化
- SQL Server有關鎖升級的誤區說明SQLServer
- hibernate(八) Hibernate檢索策略(類級別,關聯級別,批量檢索)詳解
- 關於BUGZILLA的說明和安裝
- hibernate物件關係的翻譯稿物件
- 關聯關係與依賴關係的區別
- 雙機熱備與資料備份的關係說明一二
- 一張圖說明 函式, 例項(物件), 原型之間的關係函式物件原型
- 詳細說明搜尋引擎優化的過程優化
- 也說關係
- 誰能說說SessionFacade的粒度,以及和Delegate的關係?Session
- 堆疊和記憶體的關係 細說記憶體
- [擴充套件包] Laravel-wherehasin 提升 ORM 關聯關係查詢效能 (優化 whereHas)套件LaravelORM優化
- WordPress採集入庫表結構關聯說明
- Intelligent Enterprise 和企業數字化轉型的關聯關係Intel
- mysql關聯查詢優化MySql優化
- Oracle中關於PCTFREE和PCTUSED的說明Oracle
- SAP Spartacus 的 TMS 和 Event Service 實現的關聯關係
- Hadoop HDFS結構示意圖以及互動關係說明Hadoop
- Oracle PL/SQL 優化與調整 -- Bulk 說明OracleSQL優化