posts - 165, comments - 198, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          hibernate 查詢語句總結

          Posted on 2007-12-10 12:52 G_G 閱讀(1294) 評論(0)  編輯  收藏 所屬分類: hibernate
          表關系 T1oo ->ont-to-many-> T2oo (t1oo.id-t2oo.aid)

          1.單條select延遲加載
          ????????Iterator?it?=?session.createQuery("from?T1oo?").iterate();
          ????????
          while(it.hasNext()){
          ????????????T1oo?t1?
          =?(T1oo)it.next();
          ????????????t1.getName();
          ????????}
          /*運行語句?n+1
          這就只加載 id
          Hibernate:?select?t1oo0_.id?as?col_0_0_?from?t1oo t1oo0_
          此是在 t1.getName(); 延遲加載的
          Hibernate:?select?t1oo0_.id?as?id0_,?t1oo0_.name?as?name0_0_?from?t1oo?t1oo0_?where?t1oo0_.id=?
          Hibernate:?select?t1oo0_.id?as?id0_,?t1oo0_.name?as?name0_0_?from?t1oo?t1oo0_?where?t1oo0_.id=?
          */

          2.級連查詢:
          1)set排序? <set ... order-by="avg desc" ...> 從大到小
          2)batch-size="10" 用法是
          ??? select * from t2oo? where aid in (?,?,?....)
          3)

          如果想忽略延遲,并有一定邏輯全部加載,這有兩中解決辦法:
          1).內連
          mysql>?select???*
          ????
          ->?from?t1oo?t1oo0_?inner?join?t2oo?t2ooset1_?on?t1oo0_.id=t2ooset1_.aid;
          +----+-----------+----+-----+------+---------+
          | id | name????? | id | avg | aid? | version |
          +----+-----------+----+-----+------+---------+
          |? 1 | liukaiyi? |? 1 |? 23 |??? 1 |?????? 1 |
          |? 1 | liukaiyi? |? 2 |? 24 |??? 1 |?????? 1 |
          |? 1 | liukaiyi? |? 3 |? 25 |??? 1 |?????? 1 |
          |? 2 | liukaiyi2 |? 4 |? 26 |??? 2 |?????? 0 |
          +----+-----------+----+-----+------+---------+

          ?
          ? ? ? ? Iterator?it?=?new?HashSet(session.createQuery("from?T1oo?t1?inner?join?fetch?t1.t2ooSet?t2where t2.id<=3").list()).iterator();
          ????????
          while(it.hasNext()){
          ????????????T1oo?t1?
          =?(T1oo)it.next();
          ????????????System.out.println(t1.getName());
          ????????????
          ????????????
          for(Iterator?itr=t1.getT2ooSet().iterator();itr.hasNext();?){
          ????????????????T2oo?t2?
          =?(T2oo)itr.next();
          ????????????????System.out.println(
          "??"+?t2.getAvg()?);
          ????????????}
          ????????}
          結果是:
          Hibernate:?select?t1oo0_.id?as?id0_,?t2ooset1_.id?as?id1_,?t1oo0_.name?as?name0_0_,?t2ooset1_.version?as?version1_1_,?t2ooset1_.avg?as?avg1_1_,?t2ooset1_.aid?as?aid1_1_,?t2ooset1_.aid?as?aid0__,?t2ooset1_.id?as?id0__?from?t1oo?t1oo0_?inner?join?t2oo?t2ooset1_?on?t1oo0_.id=t2ooset1_.aid?where?t2ooset1_.id<=3
          liukaiyi
          ??
          24
          ??
          23
          ??
          25

          主站蜘蛛池模板: 介休市| 宝丰县| 镇雄县| 林口县| 额尔古纳市| 团风县| 大洼县| 留坝县| 军事| 石林| 富民县| 香格里拉县| 龙口市| 吉水县| 潍坊市| 郸城县| 巫山县| 西林县| 肇庆市| 临海市| 同江市| 中西区| 渝中区| 恩施市| 廊坊市| 库尔勒市| 河东区| 秭归县| 星子县| 香格里拉县| 奉节县| 财经| 辉县市| 昌都县| 华安县| 双柏县| 兴海县| 巩义市| 通渭县| 塔城市| 安泽县|