MDA/MDD/TDD/DDD/DDDDDDD
          posts - 536, comments - 111, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          升級(jí)到hibernate3.2

          Posted on 2007-10-09 02:03 leekiang 閱讀(994) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): hibernate

          1,從Hibernate 3.0.x/3.1.x升級(jí)到最新的3.2版,一定要注意,3.2版的很多sql函數(shù)如count(), sum()的唯一返回值已經(jīng)從Integer變?yōu)長(zhǎng)ong,如果不升級(jí)代碼,會(huì)得到一個(gè)ClassCastException。

          這個(gè)變化主要是為了兼容JPA,可以在hibernate.org的最新文檔中找到說(shuō)明。

          Hibernate Team也提供了一個(gè)與原來(lái)兼容的解決方案:

          ? Configuration classicCfg = new Configuration();
          ? classicCfg.addSqlFunction( "count", new ClassicCountFunction());
          ? classicCfg.addSqlFunction( "avg", new ClassicAvgFunction());
          ? classicCfg.addSqlFunction( "sum", new ClassicSumFunction());
          ? SessionFactory classicSf = classicCfg.buildSessionFactory();

          int?count?=?((Integer)q.uniqueResult()).intValue();

          改成?int?count?=?((Number)q.uniqueResult()).intValue();?這樣就可以兩個(gè)版本同時(shí)兼容.

          2,hibernate3.2要求ehcache1.2

          3,session.createSQLQuery(sql).executeUpdate();這個(gè)hibernate3.0.5不支持,而hibernate3.2支持

          ? session.createSQLQuery(fsql).addScalar("singlevalue",
          ??? ??? ??? ??? ??? ??? Hibernate.DOUBLE).uniqueResult();這個(gè)到了3.2就不需要addScalar了.

          4,session.createSQLQuery(sql).addEntity(Class class);hibernate3.0.5不支持,單個(gè)參數(shù)的addEntity方法

          5,hibernate3.2可以對(duì)原生sql 查詢使用ResultTransformer。這會(huì)返回不受Hibernate管理的實(shí)體。
          sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS")
          ??????? .setResultTransformer(Transformers.aliasToBean(CatDTO.class))

          或setResultTransformer(new AliasToBeanResultTransformer(CatDTO.class))
          上面的查詢將會(huì)返回CatDTO的列表,它將被實(shí)例化并且將NAME和BIRTHDAY的值注射入對(duì)應(yīng)的屬性或者字段。
          http://bbs.xml.org.cn/blog/more.asp?name=lhwork&id=15351

          但必須注意,對(duì)每一個(gè)列都必須addScalar("列名")

          6,setResultTransformer與addEntity的一個(gè)區(qū)別是前者支持查任意的列,后者必須用select * from users的形式或select {a.*},{b.*} from a,b where ....。

          7,Map vs. Object[]

          Since you can also use a transformer that return a Map from alias to value/entity (e.g. Transformers.ALIAS_TO_MAP), you are no longer required to mess with index based Object arrays when working with a result.

          List iter = s.createQuery(
          "select e.student.name as studentName," +
          " e.course.description as courseDescription" +
          "from Enrolment as e")
          .setResultTransformer( Transformers.ALIAS_TO_MAP )
          .iterate();

          String name = (Map)(iter.next()).get("studentName");

          Again, this works equally well for Criteria, HQL and native SQL.

          ?

          主站蜘蛛池模板: 东乌| 富顺县| 密云县| 浪卡子县| 泗洪县| 本溪| 濉溪县| 乌兰县| 昆明市| 获嘉县| 措勤县| 清涧县| 丰台区| 东至县| 喀什市| 牙克石市| 安化县| 黔西| 根河市| 洪洞县| 泰州市| 宝丰县| 全南县| 南充市| 平塘县| 清新县| 谷城县| 资兴市| 乌恰县| 东兰县| 穆棱市| 玛沁县| 榕江县| 获嘉县| 曲水县| 遵化市| 盐边县| 长寿区| 双城市| 丰城市| 和静县|