难能之理宜停,难处之人宜厚,难处之事宜缓,难成之功宜智。

“道”就是指要自己才能走遍天下,“德”指两个人要直心相对.
posts - 13, comments - 1, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

升级Hibernate3的几点体会

Posted on 2006-03-21 11:04 微薄社区 阅读(383) 评论(0)  编辑  收藏 所属分类: Java数据访问技术

之前都是用Hibernate2.1的,原来也没想着升级,那天突然发现项目里要做批量删除的功能,心想不如升级Hibernate3体验一下罢!
谁知把lib一改,全乱了!首先是hibernate包的路径改了,要把所有的“net.sf.hibernate”替换为“org.hibernate”。
然后就是处理下面几个废弃的方法:find()、iterate()、filter()、delete(String hqlSelectQuery)和saveOrUpdateCopy()。Hibernate3一律采用createQuery()方法来执行所有的查询语句,采用DELETE 查询语句来执行批量删除,采用merge()方法来替代 saveOrUpdateCopy()方法。——又是一次全文搜索和替换!
这样,IDE基本没有报错信息了!但一旦运行就会报Connection timed out,后来发现hibernate的config文件和map文件都必须把dtd改为3.0。否则xerces会到hibernate.org上找3.0dtd,如果你没有联网,则会报出java.net.ConnectException。
另外,还要记得添加antlr-2.7.5H3.jar,要不会报java.lang.NoClassDefFoundError: antlr/ANTLRException。
花了大半天时间,系统基本正常了!粗略检查了一下,浏览和修改功能都正常,但有一个问题,竟然无法插入新记录啊!
出现的异常为:
org.hibernate.exception.ConstraintViolationException: could not insert
后来在所有元素中设置: default-lazy="false"就可以了。
值得一提的是,如果只想对已有的程序进行简单的升级,并且希望仍然调用Hibernate2.1中Session的一些接口,可以采用以下方式创建Session实例:
org.hibernate.classic.Session session=sessionFactory.openSession();
这样的改动会小很多~~~当然如果希望在程序中完全使用Hibernate3.0,就只能采用以下方式创建Session实例:org.hibernate.Session session=sessionFactory.openSession();


只有注册用户登录后才能发表评论。


网站导航: