首页 / 软件开发 / JAVA / 升级到Hibernate3.2之后的一些问题
升级到Hibernate3.2之后的一些问题2011-09-091、从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.23、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("列名")