升级spring和hibernate到4遇到的问题总结

来源:互联网 发布:云南大学软件学院图片 编辑:程序博客网 时间:2024/05/29 02:19

背景:spring从3.0.5升级到4.1.5;  hibernate从3.3.2升级到4.3.7.

错误1:Caused by: java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class

之前使用了spring-asm包,升级后发现asm最新的包是3.1.4,没有4.1.5的版本,这个错误就是使用3.1.4的版本引起的,后来查资料发现,原来spring3.2以后不再需要asm了,它被合并到spring-core里面了。所以删除asm的包后一切就正常了


错误2:java.lang.NoClassDefFoundError: [Lorg/hibernate/eng,

这是因为使用了hibernate4,在spring的配置文件里面,所有用hibernate3的都要改成用hibernate4

比如:<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">改成

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">


错误3:java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;

这是我配置了openSessionInView,查了下web.xml发现还是hibernate3, 所以要搜索一下所有用hibernate3的地方改成hibernate4就好了


错误4:

java.lang.ClassCastException: org.springframework.orm.hibernate4.SessionHolder cannot be cast to org.springframework.orm.hibernate3.SessionHolder

原因是使用了org.springframework.orm.hibernate3.support.HibernateDaoSupport, 应该改成

org.springframework.orm.hibernate4.support.HibernateDaoSupport
同时新的HibernateDaoSupport不再提供getSession方法,替代方法是currentSession


错误5:查询数据的时候出现这个错误

Caused by: java.lang.NoClassDefFoundError: javassist/util/proxy/Proxy

发现之前使用的javassist版本是3.15.0-GA, 的确没有这个类,升级到3.19.0-GA解决


错误6:Invocation of init method failed; nested exception is java.lang.ClassCastException: org.hibernate.annotations.common.reflection.java.JavaReflectionManager cannot be cast to org.hibernate.annotations.common.reflection.MetadataProviderInjector

检查发现后通过maven依赖有两个hibernate-commons-annotations.jar

一个是3.1.0.GA.jar,另一个是4.0.5.Final.jar

原来hibernate-annotations-3.4.0.GA.jar把上面的3.1.0.GA依赖进来了,而hibernate-core-4.3.7.Final.jar把上面的4.0.5.Final依赖进来了。

两个包有冲突。

hibernate-annotations-3.4.0.GA.jar从pom.xml删除后,就可以了,升级后不需要这个包了。


问题7:java.lang.ClassCastException: com.sofree.common.model.DmBylb_$$_javassist_0  cannot be cast to javassist.util.proxy.Proxy

在eclipse里面跑没有问题,放到tomcat下面跑才出现这个问题,经检查发现在lib下面有两个javassist的包,一个是

javassist-3.19.0-GA.jar, 另一个是javassist-3.11.0.GA.jar

javassist-3.19.0-GA.jar 的group id是org.javassist,hibernate-core-4.3.7.Final 依赖这个包

javassist-3.11.0.GA.jar 的group id 是javassist , struts2-core依赖这个包

所以maven没有处理掉11这个版本。要把11这个版本排除掉,问题解决。

1 0
原创粉丝点击