一只灰機

          藍色
          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用法有點問題,但是沒測試出來
          主站蜘蛛池模板: 吴桥县| 丰原市| 宁明县| 东乌珠穆沁旗| 静海县| 常宁市| 大安市| 施秉县| 永新县| 伊金霍洛旗| 乌鲁木齐市| 磴口县| 仪征市| 富顺县| 分宜县| 南川市| 鄂尔多斯市| 渭源县| 盱眙县| 广宁县| 凉城县| 琼海市| 文成县| 丘北县| 房产| 延津县| 密云县| 凌海市| 镇赉县| 许昌县| 稻城县| 马公市| 定远县| 西乌珠穆沁旗| 开平市| 滁州市| 汾阳市| 卢龙县| 中宁县| 平凉市| 汉源县|