乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       hero jack 2011-03-14

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

      默認分類 2010-08-30 16:08:01 閱讀14 評論0   字號: 訂閱

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

      測試用例:

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

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

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

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

      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會通過select語句使用外連接來加載其關(guān)聯(lián)實體或集合

      此時lazy會失效

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

      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(默認)/join/subselect)

      測試用例:

      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)保持默認,同fetch="select",如:
      <set name="students" inverse="true"
      fetch="select">

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

      測試結(jié)果:2條獨立的查詢語句

      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會通過select語句使用外連接來加載其關(guān)聯(lián)實體或集合

      此時lazy會失效

      測試結(jié)果:1條獨立的join查詢語句

      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",如:用在查詢語句
      <set name="students" inverse="true" fetch="subselect">

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

      測試用例:

      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條查詢語句

      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條查詢語句(嵌套子查詢)

      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

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多