背景: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解决
原文:http://blog.csdn.net/fireofjava/article/details/44900167