一、1+n
在執行查詢時,傳送一條sql語句獲取n個主體物件,當需要使用這n個主體物件的關聯屬性時,hibernate又傳送n條sql語句查詢這個n個主體物件的關聯屬性,這就是1+n問題。
listlist=session.createquery("from dept").list(); //傳送一條sql語句查詢主體物件
for (dept dept2 : list)
二、解決1+n的方案
1、設定關聯屬性延遲載入,這樣關聯屬性按需載入
2、設定關聯屬性的fetch屬性值為join,這樣會使用左外連線立即載入關聯屬性,但一旦設定該屬性值為join,不管在什麼情況下都要立即載入關聯屬性。
3、為關聯屬性設定batch-size,減少查詢次數,假設batch-size為4,那麼sql語句的數量將減少為1+n/4條。
4、在hql中使用fetch join,這樣就會hibernate通過左外連線立即獲取關聯屬性。在criteria中可以通過設定fetchmode.join。
Hibernate表中的1 N的問題
1 所謂1 n的問題,意思是說我們希望查詢一張表裡面的資料,但是在執行sql語句時,會發生多條和另外對應表的sql語句。這樣會降低資料庫執行效率和效能。2.解決1 n的問題的三種方式如下 使用session.creatquery的方式,在對應的類中設定 manytoone fetch fetchty...
Hibernate註解配置1 N關聯
多對一 使用 manytoone 註解定義多對一關係。entity public class flight implements serializable joincolumn name comp id public company getcompany 其中 joincolumn 註解是可選的,關...
mybatis中的1 n問題及解決
在使用mybatis的過程中,由於1 n問題導致查詢速度偏慢,此文在於記錄如何去解決。當我們使用這種巢狀查詢的方式來對映sql查詢的結果時,主表中每一行資料都需要呼叫selectpostsforblog,本來一次查詢能得到的結果,最後需要1 n次才能解決。將上面的結構修改為 不使用巢狀查詢,在sql...