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>

           但不是所有的數(shù)據(jù)庫都支持的,sqlServer orcale 都支持的。

           

          一.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=”select”

          //fetch 默認(rèn)是select

          <set name="students" inverse="true" cascade="all" fetch="select">

                      <key column="classid" />

                      <one-to-many class="com.Student" />

          </set>

           

          Classes cla = (Classes)session.load(Classes.class,1);

          System.out.println(cla.getName());

          for(Iterator iter = cla.getStudents().iterator();iter.hasNext();){

                 Student student = (Student)iter.next();

                 System.out.println(student.getName());

          }

           

          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">

                      <key column="classid" />

                      <one-to-many class="com.Student" />

          </set>

           

          Classes cla = (Classes)session.load(Classes.class,1);

          System.out.println(cla.getName());

          for(Iterator iter = cla.getStudents().iterator();iter.hasNext();){

                 Student student = (Student)iter.next();

                 System.out.println(student.getName());

          }

           

          Fetch=”select” ,上面程序只發(fā)了一條sql語句

           

           

          三.hibernate 抓取策略(Fetch) 集合代理批量抓取

           

          2.     fetch=”subselect”

          //fetch設(shè)置成subselect

          <set name="students" inverse="true" cascade="all" fetch="subselect">

                      <key column="classid" />

                      <one-to-many class="com.Student" />

          </set>

           

          List classesList = session.createQuery(“select c from Classes c where c.id in(1,2,3)”);

          for(Iterator iter=classesList.iterator();iter.hasNext();){

                 Classess classess = (Classess)iter.next();

                 System.out.println(“classes.name=”+ classes.getName());

                 for(Iterator iter1 = classess.getStudents().iterator();iter1.hasNext();){

                        Student student = (Student)iter1.next();

                        System.out.println(student.getName());

          }

          }

           

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

           

           

          四.hibernate 批量策略batch-size屬性,可以批量加載實(shí)體類,

          參見Classes.hbm.xml,同時集合也可以是使用,如:

           <set name="students" inverse="true" cascade="save-update" batch-size=”5”>

           

          在配置文件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();){

                 Student student = (Sutdent)iter.next();

                 System.out.println(student.getName());

                 System.out.println(student.getClassess().getName());

           

          }

           

          當(dāng)?shù)诙€for循環(huán)時,每次加載 之前設(shè)置的 數(shù)量 實(shí)體對象,  如:現(xiàn)在設(shè)置3,那么當(dāng)Iterator iter=students.iterator();iter.hasNext();時候,他會查詢出3個student對象

          posted on 2009-04-06 11:57 胡鵬 閱讀(461) 評論(0)  編輯  收藏 所屬分類: hibernate

          導(dǎo)航

          <2009年4月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          統(tǒng)計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          agile

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 溧水县| 奎屯市| 鄂尔多斯市| 万盛区| 新巴尔虎左旗| 龙泉市| 开阳县| 丰都县| 宣威市| 高州市| 名山县| 澄城县| 麻栗坡县| 石阡县| 连云港市| 胶南市| 西丰县| 罗江县| 福建省| 托克逊县| 那坡县| 彰化县| 华安县| 深泽县| 岳阳市| 临潭县| 梅河口市| 乐至县| 古浪县| 珲春市| 平和县| 龙门县| 日喀则市| 家居| 河间市| 屏边| 莫力| 新津县| 鱼台县| 信丰县| 调兵山市|