hibernate3.2特性

來源:互聯網
上載者:User

http://blog.csdn.net/yidianfengfan/archive/2009/05/18/4198008.aspx

1,從Hibernate 3.0.x/3.1.x升級到最新的3.2版,一定要注意,3.2版的很多sql函數如count(), sum()的唯一傳回值已經從Integer變為Long,如果不升級代碼,會得到一個ClassCastException。

這個變化主要是為了相容JPA,可以在hibernate.org的最新文檔中找到說明。

Hibernate Team也提供了一個與原來相容的解決方案:

  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(); 這樣就可以兩個版本同時相容.

2,hibernate3.2要求ehcache1.2

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

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

4,session.createSQLQuery(sql).addEntity(Class class);hibernate3.0.5不支援,單個參數的addEntity方法

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

或setResultTransformer(new AliasToBeanResultTransformer (CatDTO.class))
上面的查詢將會返回CatDTO的列表,它將被執行個體化並且將NAME和BIRTHDAY的值注射入對應的屬性或者欄位。
http://bbs.xml.org.cn/blog/more.asp?name=lhwork&id=15351

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

6,setResultTransformer與addEntity的一個區別是前者支援查任意的列,後者必須用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.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.