升级Hibernate3的几点体会

之前都是用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();

你可能感兴趣的:(升级Hibernate3的几点体会)