Hibernate4+Spring4+Struts2在老版本基础上升级遇到的问题

来源:互联网 发布:个人卖数据 编辑:程序博客网 时间:2024/05/22 09:39

之前的项目是spring2.5+hibernate3+struts2。现在升级为spring4,hibernate4

升级步骤:

一、删除之前的Hibernate,spring的jar包,导入spring-framework-4.0.3.RELEASE-dist.zip的部分jar包,导入hibernate-release-4.3.5.Final.zip->lib->requied下的所有包。


二、修改spring核心配置文件,修改3为4

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

(2)<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">

(3)如果要使用Hibernate的注解,不再使用配置文件,则需修改mappingLocations改成packagesToScan

<property name="mappingLocations"><list><value>classpath:com/xuedou/skyedu/bean/*.hbm.xml</value></list></property>
改成
<property name="packagesToScan"><list><value>com.xuedou.skyedu.bean</value></list></property>

三:修改web.xml,增加:

<span style="white-space:pre"></span><filter><filter-name>openSessionInViewFilter</filter-name><filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class><!-- singleSession默认为true,若设为false则等于没用OpenSessionInView,默认可不写--><init-param><param-name>singleSession</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>openSessionInViewFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>


如果继续使用Hibernate的实体映射文件hbm.xml  则需改成(因为在3.6版本后,必须修改):

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


遇到的异常:

异常一:Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z

问题原因:是因为Hibernate3.5之前,持久化包是ejb3-persistence.jar,包含了javax.persistence.OneToMany,而hibernate3.5之后用的持久化包是hibernate-jpa-2.x.jar。有人说删掉javaee.jar中的persistence,这是不可取的,删除这个没用,关键是项目中引入的jar包与之冲突。

解决办法:两个jar包不能同时存在,删除ejb3-persistence.jar。


最后一定要project->clear重新编译,不然还是报错,找了两天的错重新编译就好了,郁闷!

0 0