背景: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.AnnotationSessionFactory
<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这个版本排除掉,问题解决。