本文向大家介绍Hibernate3.2,可能好多人还不了解Hibernate3.2,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。
成都网站建设、成都网站设计,成都做网站公司-创新互联公司已向1000多家企业提供了,网站设计,网站制作,网络营销等服务!设计与技术结合,多年网站推广经验,合理的价格为您打造企业品质网站。
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("列名")
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
【编辑推荐】
文章题目:Hibernate3.2基础分析
标题链接:http://www.shufengxianlan.com/qtweb/news45/300995.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联