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

之前的项目是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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值