hiernate抓取策略和批量策略
在hibernate中設(shè)置:
查詢數(shù)據(jù)庫每次最多返回50條結(jié)果:
<property name=”hibernate.jdbc.fetch_size”>50</property>
30條更新數(shù)據(jù)庫一次:
<property name= ”hibernatejdbc.batch_size”>30</property>
一.hibernate 抓取策略(Fetch) 單端代理批量抓取
1.fetch=”select” 關(guān)聯(lián)實(shí)體
//fetch 默認(rèn)是select
<many-to-one name="businessId" column="business_id" insert="true" update="true" fetch="select">
Student student = (Student)session.load(Student.class,1);
System.out.println(student.getName());
System.out.println(student.getClasses().getName()); //多對一中的屬性班級,獲取班級名稱
Fetch=”select” ,上面程序會發(fā)2條sql語句,第二條發(fā)送一條select語句抓取當(dāng)前對象關(guān)聯(lián)實(shí)體或集合 (這里指是班級名稱)
2.fetch=” join” 關(guān)聯(lián)實(shí)體
//fetch 設(shè)置成 join
<many-to-one name="businessId" column="business_id" insert="true" update="true"
fetch=" join ">
Student student = (Student)session.load(Student.class,1);
System.out.println(student.getName());
System.out.println(student.getClasses().getName()); //多對一中的屬性班級,獲取班級名稱
fetch=” join” , 上面程序會發(fā)1條sql語句, hibernate會通過select使用外鏈接來加載其關(guān)聯(lián)實(shí)體或集合,此時lazy會失效
二.hibernate 抓取策略(Fetch) 集合代理批量抓取
1.
//fetch 默認(rèn)是select
<set name="students" inverse="true" cascade="all" fetch="select">
</set>
Classes cla = (Classes)session.load(Classes.class,1);
System.out.println(cla.getName());
for(Iterator iter = cla.getStudents().iterator();iter.hasNext();){
}
fetch=”select” ,上面程序用到了就發(fā)sql語句,第二從循環(huán)中發(fā)了N條,如果:fetch=”subselect”,則只是發(fā)送一條語句,見下面
2 fetch=”join”
//fetch 設(shè)置成join
<set name="students" inverse="true" cascade="all" fetch="join">
</set>
Classes cla = (Classes)session.load(Classes.class,1);
System.out.println(cla.getName());
for(Iterator iter = cla.getStudents().iterator();iter.hasNext();){
}
Fetch=”select” ,上面程序只發(fā)了一條sql語句
三.hibernate 抓取策略(Fetch) 集合代理批量抓取
2.
//fetch設(shè)置成subselect
<set name="students" inverse="true" cascade="all" fetch="subselect">
</set>
List classesList = session.createQuery(“select c from Classes c where c.id in(1,2,3)”);
for(Iterator iter=classesList.iterator();iter.hasNext();){
}
}
Fetch=”subselct” ,另外發(fā)送一條select語句抓取在前面查詢到的所有實(shí)體對象的關(guān)聯(lián)集合
四.hibernate 批量策略batch-size屬性,可以批量加載實(shí)體類,
參見Classes.hbm.xml,同時集合也可以是使用,如:
在配置文件hbm.xml 設(shè)置中:
<class name="com.Classes " table="tb_classes" batch-size=”3”>
List students = session.createQuery(“select s from Student s where s.id in(:ids)”).setParameterList(“:ids”,new Object[]{1,11,21,31,41,51,61,71,81,91}).list();
for(Iterator iter=students.iterator();iter.hasNext();){
}
當(dāng)?shù)诙€for循環(huán)時,每次加載 之前設(shè)置的 數(shù)量 實(shí)體對象,
posted on 2009-04-06 11:57 胡鵬 閱讀(461) 評論(0) 編輯 收藏 所屬分類: hibernate