posts - 431,  comments - 344,  trackbacks - 0

          當我們用HQL進行子查詢的時候,如select * from Tree where pid in (select id from Tree,此時HIBERANTE就會報錯,說什么*號錯誤之類的。但如果將*改為Tree類里的所有子段時就不會有問題了。就會像平時一樣第一行數據返回一個Object[],然后你再根據Tree類里字段對Object[]數組里的值進行轉換。這樣一來比較麻煩。今天發現如果我SQL來查有一個方法可以返回一個對象的。
          Configuration config = new Configuration().configure();
          SessionFactory sf     = config.buildSessionFactory();
          Session session = sf.openSession();
          Transaction ts = session.beginTransaction();
          Query query = session.createSQLQuery("select * from Tree t where pid in (select id from Tree) ").addEntity(Tree.class); //返回對象
          List  list = query.list(); 

          此時在遍歷list時就可以(Tree)list.get[i];將每一行的內容變換為一個對象了。

          另還可以返回一個Map對象,也就是說在在list里包含多個Map,代碼如下
          Query query = session.createSQLQuery("select id,name from Tree t where pid in (select id from Tree) ").setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); //返回一個map,KEY:為DB中名稱一致(大小寫一致)遍歷list時就可以

          Map map = (Map)list.get[i];

          map.get("id");map.get("name");來取值。按你的SQL語句select后的字段名來作為map的Key,但這個key必須與數據庫中的字段名一模一樣。


          還可以用作函數方面的。如
          Query query = session.createSQLQuery("select sum(id) SUMID from Tree t where pid in (select id from Tree)
          .addScalar("SUMID",Hibernate.INTEGER)  //轉換類型,按DB中的type轉
          .setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); //返回一個map,KEY:為DB中名稱一致(大小寫一致)

          直接就map.get("SUMID")可以取值了


          還有一點就是這個方法在Hibernate3.2版本上才能正常運行。

          posted on 2009-02-23 21:26 周銳 閱讀(22093) 評論(0)  編輯  收藏 所屬分類: Hibernate
          主站蜘蛛池模板: 凤庆县| 泸州市| 星子县| 图木舒克市| 揭西县| 大余县| 陆川县| 阿荣旗| 肥西县| 武川县| 伊春市| 建湖县| 广饶县| 巨野县| 泰来县| 乐亭县| 西城区| 天水市| 巨鹿县| 晋宁县| 福鼎市| 赞皇县| 冷水江市| 仙桃市| 武鸣县| 大城县| 栖霞市| 盖州市| 龙川县| 河北区| 河南省| 北碚区| 米林县| 南昌县| 廉江市| 荔浦县| 兴文县| 万盛区| 姚安县| 丹巴县| 湖南省|