首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Hibernate 惰性載入策略全解析:類級別、集合、多對一三大維度

     編輯:Java 綜合教學

核心概念

  • 惰性載入:返回代理物件,實際訪問時才查詢 DB。
  • 立即載入:查詢主物件時同步 JOIN 關聯資料。

三大配置層級

層級配置元素屬性值預設
類<class>true(惰性) / false(立即)true
一對多/多對多<set>true / extra(增強惰性) / falsetrue
多對一<many-to-one>proxy / no-proxy / falseproxy

實測案例(Dept ↔ Emp 多對一)

1. 類級別

  • lazy="false":session.load() 立即發 SQL 查詢 Dept。
  • lazy="true":load() 僅建代理,不發 SQL。

2. 集合(<set>)

  • lazy="false":載入 Dept 同步查詢 Emp(兩條 SQL)。
  • lazy="true":首次 dept.getEmps().size() 觸發 SQL。
  • lazy="extra":size()、isEmpty() 走 SELECT COUNT(*),不載入整個集合,極大優化大集合場景。

3. 多對一(<many-to-one>)

  • proxy(預設):返回 Dept 代理,訪問屬性時查詢。
  • no-proxy:屬性初為 null,首次讀取觸發查詢賦值真實物件,更透明但需字節碼增強。
  • false:立即 JOIN 查詢 Dept。

選型建議

  • 預設保持惰性,按需在 Service 層初始化(方案一/二)。
  • 大集合唯讀統計場景 → extra。
  • 固定高頻關聯、接受 JOIN 開銷 → lazy="false"。
  • 避免全域關閉惰性,防止「載入一個物件牽動全庫」。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved