使用hibernate查詢乙個物件的時候,查詢其關聯物件.應該如何查詢,可以通過配置對映檔案的屬性來設定。
lazy屬性:
解決查詢的時機的問題,是否延遲載入關聯資料,例如下面2條語句:
customer c1 =
(customer) session.
get(customer.
class,1
);system.out.
println
(c1.
getlinkmans()
.size()
);
lazy的預設屬性是true,即執行第一條語句的時候,不會執行sql語句去查詢其關聯的表的資料,它只會查詢當前表的資料,當執行到第二條語句的時候才會執行sql語句去查詢其關聯表的資料.
fetch屬性
用於解決查詢的語句用何種形式來執行,例如select 語句,join語句,子查詢語句等等.
lazy和fetch屬性可以配置在set標籤上, 可以在一對多的一方和多對多的任何一方的set標籤上進行設定.
下面介紹下這2個屬性的取值及其含義:
lazy的取值
控制是否延遲查詢關聯物件
true
預設值,延遲
false
不延遲extra
及其懶惰,只查詢關聯條件的內容,關聯物件的其他欄位不查詢,只有單獨用到這些欄位才會再次查詢
fetch的取值
控制sql語句生成的格式
select
預設值,傳送select查詢語句
join
連線查詢.傳送的是一條迫切左外連線,如果配置了join,那麼lazy屬性就失效了
subselect
子查詢.傳送一條子查詢查詢其關聯物件.(需要使用list()方法進行測試)
hibernate框架都採用了預設值,開發中基本上使用的都是預設值。特殊的情況按需求而定。
在標籤上使用fetch和lazy屬性只會出現在一對多的多方對映檔案中。具體取值和含義如下:
lazy的取值
控制是否延遲查詢關聯物件
false
不延遲proxy
預設值,是否延遲是由另一端的上的lazy屬性確定.
說明:如果另一端的上的lazy=」true」,那麼proxy的值就是true(延遲載入);如果另一端的
上lazy=」false」,那麼該proxy的值就是false(不採用延遲.)
fetch的取值
控制sql語句生成的格式
select
預設值,傳送select查詢語句
join
連線查詢.傳送的是一條迫切左外連線,如果配置了join,那麼lazy屬性就失效了
hibernate 查詢優化
1.延遲載入先獲取到 物件,當真正使用到該物件中的屬性的時候,才會傳送sql語句,是hibernate框架提公升效能的方式 2.類級別的延遲載入 session物件的load方法預設就是延遲載入 customer c session.load customer.class,1l 沒有傳送sql語句,...
Hibernate框架 查詢優化
一 類級別查詢 get方法 沒有任何策略,呼叫即立即查詢資料庫載入資料。load方法 應用類級別的載入策略 lazy 預設值 true,查詢類時,會返回 物件,會在使用屬性時,根據關聯的session查詢資料庫,載入資料 lazy false.load方法會與get方法沒有任何區別,呼叫時即載入資料...
Hibernate的查詢優化策略
2.抓取策略 3.批量抓取 延遲載入 也稱為懶載入 是hibernate關聯關係物件預設的載入方式,延遲載入機制是為了避免一些無謂的效能開銷而提出來的,所謂延遲載入就是當在真正需要資料的時候,才真正執行資料載入操作。通常將延遲載入分為兩類 一類叫做類級別延遲,另一類叫做關聯級別的延遲。類級別的延遲指...