hibernate 抓取策略

2021-09-06 05:59:37 字數 2036 閱讀 1073

抓取策略(fetching strategy)

抓取策略(fetching strategy)

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

hibernate3 定義了如下幾種抓取策略:

一、單端**的批量抓取

student student = (student)session.load(student.class, 1);

system.out.println("student.name=" + student.getname());

system.out.println("classes.name=" + student.getclasses().getname());

session.gettransaction().commit();

1、fetch="select",

保持預設,同fetch="select",如:

fetch="select",另外傳送一條select語句抓取當前物件關聯實體或集合

2、fetch="join"

fetch="join",hibernate會通過select語句使用外連線來載入其關聯實體或集合,

此時lazy會失效

二、集合**的批量抓取

classes classes = (classes)session.load(classes.class, 1);

system.out.println("classes.name=" + classes.getname());

for (iterator iter=classes.getstudents().iterator(); iter.hasnext();)

1、保持預設,同fetch="select"

fetch="select",另外傳送一條select語句抓取當前物件關聯實體或集合

2、設定fetch="join"

如:fetch="join",hibernate會通過select語句使用外連線來載入其關聯實體或集合,

此時lazy會失效

3、設定fetch="subselect",如:

fetch="subselect",另外傳送一條select語句抓取在前面查詢到的所有實體物件的關聯集合

list classeslist = session.createquery("select c from classes c where c.id in(1, 2, 3)").list();

for (iterator iter=classeslist.iterator(); iter.hasnext();)

}

三、batch-szie

1、batch-size在上的應用

batch-size屬性,可以批量載入實體類

list students = session.createquery("select s from student s where s.id in(:ids)")

.setparameterlist("ids", new object)

.list();

for (iterator iter=students.iterator(); iter.hasnext();)

2、batch-szie在集合上的應用

batch-size屬性,可以批量載入實體類

list classeslist = session.createquery("select c from classes c").list();

for (iterator iter=classeslist.iterator(); iter.hasnext();)

}

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 抓取策略Fetch

lazy與fetch 如果fetch為 join lazy不論設定成什麼樣的值,都不起作用 如果fetch為 select 先載入classes,再載入student,而lazy決定在什麼時候載入studentpublic class fetchtest extends hibernateutil ...