关于Hibernate3.2的一些介绍
创始人
2024-04-03 18:22:20
0

1、从Hibernate3.0.x/3.1.x升级到***的Hibernate3.2,一定要注意,Hibernate3.2的很多sql函数如count(), sum()的唯一返回值已经从Integer变为Long,如果不升级代码,会得到一个ClassCastException。这个变化主要是为了兼容JPA,可以在Hibernate.org的***文档中找到说明。

Hibernate Team也提供了一个与原来兼容的解决方案:

  1. Configuration classicCfg = new Configuration();   
  2. classicCfg.addSqlFunction( "count", new ClassicCountFunction());   
  3. classicCfg.addSqlFunction( "avg", new ClassicAvgFunction());   
  4. classicCfg.addSqlFunction( "sum", new ClassicSumFunction());   
  5. 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管理的实体。

  1. sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS")  
  2. .setResultTransformer(Transformers.aliasToBean(CatDTO.class))  

或:

  1. 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[]

  1. Since you can also use a transformer that return a Map from alias to value/entity   
  2.  
  3. (e.g. Transformers.ALIAS_TO_MAP), you are no longer required to mess with index based   
  4.  
  5. Object arrays when working with a result.   
  6.  
  7. List iter = s.createQuery(  
  8.   "select e.student.name as studentName," +  
  9.   "       e.course.description as courseDescription" +  
  10.   "from   Enrolment as e")  
  11.   .setResultTransformer( Transformers.ALIAS_TO_MAP )  
  12.   .iterate();  
  13.  
  14. String name = (Map)(iter.next()).get("studentName");  
  15.  
  16. Again, this works equally well for Criteria, HQL and native SQL。 

 

【编辑推荐】

  1. 强人Hibernate文档笔记(上)
  2. 强人Hibernate文档笔记(中)
  3. 强人Hibernate文档笔记(下)
  4. Hibernate一对多关系的处理
  5. Hibernate的性能优化

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...