一只灰機

          藍色
          posts - 6, comments - 1, trackbacks - 0, articles - 0

          hibernate 中createQuery與createSQLQuery兩者區別

          Posted on 2010-11-09 17:42 noaso 閱讀(1535) 評論(1)  編輯  收藏 所屬分類: java技術


          前者用的hql語句進行查詢,后者可以用sql語句查詢
          前者以hibernate生成的Bean為對象裝入list返回
          后者則是以對象數組進行存儲
          所以使用createSQLQuery有時候也想以hibernate生成的Bean為對象裝入list返回,就不是很方便
          突然發現createSQLQuery有這樣一個方法可以直接轉換對象
          Query query = session.createSQLQuery(sql).addEntity(XXXXXXX.class);
          XXXXXXX 代表以hibernate生成的Bean的對象,也就是數據表映射出的Bean。
          呵呵以后多注意,還是時不時的要看看hibernate各個對象方法的使用。

          還有另外一個相關的小細節應注意:
          比如有這樣一個po
          PO: User.class
          properties: userId,userName
          DDL: create table tuser (userid varchar(10),username varchar(20));
          當執行:
              session.createQuery("from User u").list()時生成的SQL:
          select userid,username from tuser;
          當執行:
            
          session.createQuery("from User u").iterator()時生成的SQL:

          select userid from tuser;

          可以看出list()一次將數據從數據庫中讀出直接填充到List中

          iterator()將數據的主鍵從數據庫中讀出,當循環這個Iterator時才添加執行:

          select userid,username from user where userid=?;把數據讀出。
          在不同的應用范圍使用不同的方法,具體在hibernate應用中應當注意。

          另外涉及到hibernate 的一級緩存 二級緩存 以后再研究。

          Feedback

          # re: hibernate 中createQuery與createSQLQuery兩者區別[未登錄]  回復  更多評論   

          2012-08-30 09:56 by 過客
          public Integer getTotalCount() {

          String hql = "select count(*) from " + entityClass.getName();
          return (Integer) getHibernateTemplate().execute(new HibernateCallback() {
          public Object doInHibernate(Session session) throws HibernateException, SQLException { SQLQuery query = session.createSQLQuery(hql);
          query.addEntity(entityClass);
          Object test = query.uniqueResult();
          System.out.println("TotalCounts:"+test.toString()); return (Integer)test;

          }

          }
          我這樣寫查詢記錄總數,會提示sql查詢語句錯誤,我知道是這里createSQLQuery用法有點問題,但是沒測試出來
          主站蜘蛛池模板: 天镇县| 栖霞市| 赞皇县| 芦溪县| 临江市| 望城县| 富宁县| 屏山县| 米脂县| 嘉黎县| 株洲市| 华容县| 韶山市| 鹰潭市| 乡宁县| 绥阳县| 成武县| 嘉峪关市| 雷山县| 闸北区| 聂拉木县| 陆良县| 镇江市| 大渡口区| 南京市| 祁东县| 青川县| 镇巴县| 顺义区| 闵行区| 临泉县| 东乡县| 蒲江县| 凤庆县| 丹凤县| 都江堰市| 察雅县| 剑阁县| 罗甸县| 宁远县| 庆云县|