fetch 和 lazy 配置用於資料的查詢

2021-06-20 01:48:34 字數 817 閱讀 6512

fetch 和 lazy 配置用於資料的查詢 

lazy 引數值常見有 false 和 true,hibernate3 對映檔案中預設lazy = true ; 

fetch 指定了關聯物件抓取的方式,引數值常見是select和join,預設是select, select方式先查詢主物件,再根據關聯外來鍵,每乙個物件發乙個select查詢,獲取關聯的物件,形成了n+1次查詢;而join方式,是left outer join查詢,主物件和關聯物件用一句外來鍵關聯的sql同時查詢出來,不會形成多次查詢。 

在對映檔案中,不同的組合會使用不同的查詢: 

1、lazy="true" fetch = "select" ,使用延遲策略,開始只查詢出主物件,關聯物件不會查詢,只有當用到的時候才會發出sql語句去查詢 ; 

2、lazy="false" fetch = "select" ,沒有用延遲策略,同時查詢出主物件和關聯物件,產生1+n條sql. 

3、lazy="true"或lazy="false" fetch = "join",延遲都不會作用,因為採用的是外連線查詢,同時把主物件和關聯物件都查詢出來了. 

另外,在hql查詢中,配置檔案中設定的join方式是不起作用的,而在其他查詢方式如get、criteria等是有效的,使用 select方式;除非在hql中指定join fetch某個關聯物件。fetch策略用於get/load乙個物件時,如何獲取非lazy的物件/集合。 這些引數在query中無效。 

配置還是缺乏靈活性的,開發中常會有不同的需求,所以在配置中選擇預設值,在具體業務中來指定策略。再者對資料庫的操作都是使用sql來執行的,掌握了sql執行效能反過來看這些配置也許很容易了。  

Hibernate中fetch和lazy介紹

fetch 指定關聯物件抓取的方式,可以設定fetch select 和 fetch join select方式時先查詢返回要查詢的主體物件 列表 再根據關聯外來鍵id,每乙個物件發乙個select查詢,獲取關聯的物件,形成n 1次查詢 而join方式,主體物件和關聯物件用一句外來鍵關聯的sql同時...

Hibernate中fetch和lazy介紹

fetch 指定關聯物件抓取的方式,可以設定fetch select 和 fetch join select方式時先查詢返回要查詢的主體物件 列表 再根據關聯外來鍵id,每乙個物件發乙個select查詢,獲取關聯的物件,形成n 1次查詢 而join方式,主體物件和關聯物件用一句外來鍵關聯的sql同時...

TOMCAT記憶體和連線數配置

如果是使用的catalina.sh linux 或catalina.bat win 啟動的 修改這兩個檔案,加上下面這句 set catalina opts xms64m xmx128m 如果使用的winnt服務啟動 開啟c winnt system32 regedt32.exe,在hkey loc...