一只灰機

          藍色
          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用法有點問題,但是沒測試出來
          主站蜘蛛池模板: 元阳县| 梅州市| 襄汾县| 大同县| 志丹县| 江达县| 时尚| 景谷| 扎赉特旗| 铜梁县| 拉萨市| 大姚县| 英山县| 西平县| 无锡市| 宣城市| 广平县| 大方县| 文登市| 镇巴县| 遵化市| 增城市| 黄骅市| 双城市| 龙口市| 合作市| 磴口县| 高平市| 哈尔滨市| 双城市| 桃源县| 若尔盖县| 梁河县| 靖州| 昌图县| 临汾市| 重庆市| 阿坝县| 光山县| 白城市| 荃湾区|