快速业务通道

升级到Hibernate3.2之后的一些问题 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

升级到Hibernate3.2之后的一些问题

时间:2011-09-09

1、从Hibernate3.0.x/3.1.x升级到最新的Hibernate3.2,一定要注意,Hibernate3.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的值注射入对应的属性或者字段。但必须注意,对每一个列都必须addScalar("列名")

升级到Hibernate3.2之后的一些问题(2)

时间:2011-09-09

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 wo***ng 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。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号