hibernate的抓取策略和懶載入

2021-07-31 16:37:26 字數 789 閱讀 6693

hibernate的抓取策略指的是當應用程式需要在關聯關係間(表與表之間)進行導航的時候, hibernate如何獲取關聯物件的策略。抓取策略可以在o/r對映的元資料中宣告(eg:hbm.xml),也可以在特定的hql 或條件查詢(criteria query)中過載宣告。

抓取策略:大的方面有兩類 selete 和 join

用一對多來舉例:

fetch = "select"是在查詢的時候先查詢出一端的實體,然後在根據一端的查詢出多端的實體,會產生1+n條sql語句;

fetch = "join"是在查詢的時候使用外連線進行查詢,不會差生1+n的現象。

在hql查詢中配置檔案中設定的join方式是不起作用的(而在所有其他查詢方式如get、criteria或再關聯獲取等等都是有效的),會使用select方式,除非你在hql中指定join fetch某個關聯物件。

通常情況下,我們並不使用對映文件進行抓取策略的定製。更多的是,保持其預設值,然後在特定的事務中, 使用hql的左連線抓取(left join fetch) 對其進行過載。這將通知 hibernate在第一次查詢中使用外部關聯(outer join),直接得到其關聯資料。 在條件查詢 api中,應該呼叫 setfetchmode(fetchmode.join)語句。

hibernate推薦的做法也是最佳實踐:把所有物件關聯的抓取都設為lazy!然後在特定事務中進行過載。

這種考慮是基於:物件之間的關聯式錯綜複雜的,有時候哪怕我們只是乙個簡單的load,也會導致很多物件被load出來!所以在hibernate中,所有物件關聯都是lazy的

hibernate 抓取策略

1.單端 對端是one,即many2one 1.1 在用many2one時,fetch可以採取select或者join.用select時,會另發一條語句載入關聯物件。用join時,用一條語句就查上來,相當於資料庫裡面的連線,內連線外連線取決於外來鍵是否允許為空。注意 這個規則僅適用於get或者loa...

Hibernate抓取策略

抓取策略指的是我們在獲取資料時,告訴hibernate以何種sql的方式去獲取,hibernate有三種抓取方式可供選擇,分別是select join subselect 該屬性只能在集合標籤和關聯關係標籤上使用。xml version 1.0 encoding utf 8 cn.hibernate...

hibernate 抓取策略

抓取策略 fetching strategy 抓取策略 fetching strategy 是指 當應用程式需要在 hibernate實體物件圖的 關聯關係間進行導航的時候,hibernate如何獲取關聯物件的策略。抓取策略可以在o r對映的元資料中宣告,也可以在特定的hql 或條件查詢 crite...