小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

hibernate抓取策略(單端代理的批量抓取fetch=select(默認(rèn))/join/subselect)

 hero jack 2011-03-14

hibernate抓取策略(單端代理的批量抓取fetch=select(默認(rèn))/join)

默認(rèn)分類 2010-08-30 16:08:01 閱讀14 評(píng)論0   字號(hào): 訂閱

一、hibernate抓取策略(單端代理的批量抓取fetch=select(默認(rèn))/join)

測(cè)試用例:

Student student = (Student)session.get(Student.class, 1);
    System.out.println(student.getName());
    System.out.println(student.getClasses().getName());

1)保持默認(rèn),同fetch="select",如:
<many-to-one name="classes" column="classesid" fetch="select"/>

fetch="select",另外發(fā)送一條select語(yǔ)句抓取當(dāng)前對(duì)象關(guān)聯(lián)實(shí)體或集合

執(zhí)行結(jié)果:2條語(yǔ)句

Hibernate: select student0_.id as id1_0_, student0_.name as name1_0_, student0_.class_id as class3_1_0_ from student_join student0_ where student0_.id=?
學(xué)生1
Hibernate: select classes0_.id as id0_0_, classes0_.name as name0_0_ from classes_join classes0_ where classes0_.id=?
高一(1)班

======================================

 

2)設(shè)置fetch="join",如:
<many-to-one name="classes" column="classesid" fetch="join"/>

fetch="join",hibernate會(huì)通過(guò)select語(yǔ)句使用外連接來(lái)加載其關(guān)聯(lián)實(shí)體或集合

此時(shí)lazy會(huì)失效

執(zhí)行結(jié)果:一條join語(yǔ)句

Hibernate: select student0_.id as id1_1_, student0_.name as name1_1_, student0_.class_id as class3_1_1_, classes1_.id as id0_0_, classes1_.name as name0_0_ from student_join student0_ left outer join classes_join classes1_ on student0_.class_id=classes1_.id where student0_.id=?
學(xué)生1
高一(1)班

======================================================

 

二、hibernate抓取策略(集合代理的批量抓取,fetch=select(默認(rèn))/join/subselect)

測(cè)試用例:

Classes c = (Classes) session.load(Classes.class, new Integer(1));
    System.out.println("Class.name=" + c.getName());
    Set stuSet = c.getStudents();
    System.out.println(stuSet.size());
    if(stuSet != null && !stuSet.isEmpty()){
     for(Iterator it = stuSet.iterator(); it.hasNext();){
      Student s = (Student) it.next();
      System.out.println("student.name=" + s.getName());
     }
    }

1)保持默認(rèn),同fetch="select",如:
<set name="students" inverse="true"
fetch="select">

fetch="select",另外發(fā)送一條select語(yǔ)句抓取當(dāng)前對(duì)象關(guān)聯(lián)實(shí)體或集合

測(cè)試結(jié)果:2條獨(dú)立的查詢語(yǔ)句

Hibernate: select classes0_.id as id0_0_, classes0_.name as name0_0_ from classes_join classes0_ where classes0_.id=?
Class.name=高一(1)班
Hibernate: select students0_.class_id as class3_1_, students0_.id as id1_, students0_.id as id1_0_, students0_.name as name1_0_, students0_.class_id as class3_1_0_ from student_join students0_ where students0_.class_id=?
9
student.name=學(xué)生7
student.name=學(xué)生3
student.name=學(xué)生1
student.name=學(xué)生8
student.name=學(xué)生2
student.name=學(xué)生4
student.name=學(xué)生5
student.name=學(xué)生9
student.name=學(xué)生6

(2)設(shè)置fetch="join",如:
<set name="students" inverse="true" fetch="join">

fetch="join",hibernate會(huì)通過(guò)select語(yǔ)句使用外連接來(lái)加載其關(guān)聯(lián)實(shí)體或集合

此時(shí)lazy會(huì)失效

測(cè)試結(jié)果:1條獨(dú)立的join查詢語(yǔ)句

Hibernate: select classes0_.id as id0_1_, classes0_.name as name0_1_, students1_.class_id as class3_3_, students1_.id as id3_, students1_.id as id1_0_, students1_.name as name1_0_, students1_.class_id as class3_1_0_ from classes_join classes0_ left outer join student_join students1_ on classes0_.id=students1_.class_id where classes0_.id=?
Class.name=高一(1)班
9
student.name=學(xué)生6
student.name=學(xué)生4
student.name=學(xué)生9
student.name=學(xué)生7
student.name=學(xué)生2
student.name=學(xué)生3
student.name=學(xué)生8
student.name=學(xué)生1
student.name=學(xué)生5

 

 

 

(3)設(shè)置fetch="subselect",如:用在查詢語(yǔ)句
<set name="students" inverse="true" fetch="subselect">

fetch="subselect",另外發(fā)送一條select語(yǔ)句抓取在前面查詢到的所有實(shí)體對(duì)象的關(guān)聯(lián)集合

測(cè)試用例:

List classList = session.createQuery("from Classes where id in (1,2,3)").list();
    for(Iterator iter = classList.iterator(); iter.hasNext();){
     Classes c = (Classes)iter.next();
     System.out.println("Class.name=" + c.getName());
     Set stuSet = c.getStudents();
     System.out.println(stuSet.size());
     if(stuSet != null && !stuSet.isEmpty()){
      for(Iterator it = stuSet.iterator(); it.hasNext();){
       Student s = (Student) it.next();
       System.out.println("student.name=" + s.getName());
      }
     }
    }   

當(dāng)不設(shè)fetch="subselect" ,即:<set name="students" inverse="true">,結(jié)果如下:

執(zhí)行了3條查詢語(yǔ)句

Hibernate: select classes0_.id as id0_, classes0_.name as name0_ from classes_join classes0_ where classes0_.id in (1 , 2 , 3)
Class.name=高一(1)班
Hibernate: select students0_.class_id as class3_1_, students0_.id as id1_, students0_.id as id1_0_, students0_.name as name1_0_, students0_.class_id as class3_1_0_ from student_join students0_ where students0_.class_id=?
9
student.name=學(xué)生8
student.name=學(xué)生5
student.name=學(xué)生3
student.name=學(xué)生9
student.name=學(xué)生7
student.name=學(xué)生1
student.name=學(xué)生4
student.name=學(xué)生6
student.name=學(xué)生2
Class.name=高一(2)班
Hibernate: select students0_.class_id as class3_1_, students0_.id as id1_, students0_.id as id1_0_, students0_.name as name1_0_, students0_.class_id as class3_1_0_ from student_join students0_ where students0_.class_id=?
4
student.name=學(xué)生3
student.name=學(xué)生4
student.name=學(xué)生1
student.name=學(xué)生2
Class.name=高一(3)班
Hibernate: select students0_.class_id as class3_1_, students0_.id as id1_, students0_.id as id1_0_, students0_.name as name1_0_, students0_.class_id as class3_1_0_ from student_join students0_ where students0_.class_id=?
0

當(dāng)不設(shè)fetch="subselect" ,即:<set name="students" inverse="true" fetch="subselect">,結(jié)果如下:

執(zhí)行了1條查詢語(yǔ)句(嵌套子查詢)

Hibernate: select classes0_.id as id0_, classes0_.name as name0_ from classes_join classes0_ where classes0_.id in (1 , 2 , 3)
Class.name=高一(1)班
Hibernate: select students0_.class_id as class3_1_, students0_.id as id1_, students0_.id as id1_0_, students0_.name as name1_0_, students0_.class_id as class3_1_0_ from student_join students0_ where students0_.class_id in (select classes0_.id from classes_join classes0_ where classes0_.id in (1 , 2 , 3))
9
student.name=學(xué)生8
student.name=學(xué)生4
student.name=學(xué)生5
student.name=學(xué)生9
student.name=學(xué)生6
student.name=學(xué)生2
student.name=學(xué)生3
student.name=學(xué)生1
student.name=學(xué)生7
Class.name=高一(2)班
4
student.name=學(xué)生3
student.name=學(xué)生4
student.name=學(xué)生2
student.name=學(xué)生1
Class.name=高一(3)班
0

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多