Spring3+Hibernate3升级为Spring4+Hibernate4

    xiaoxiao2026-04-04  6

    写在开始

    今天,把当前项目做了一下升级,特此记录一下。

    由于历史原因,项目本身并不是Maven项目,所以升级JAR包都是手动从Maven库中下载,然后load进项目lib。

    目前 spring版本已经更新至5,但是4还是主流版本。

    相比spring3,spring4新特性如下:Spring4新特性——泛型限定式依赖注入Spring4新特性——核心容器的其他改进Spring4新特性——Web开发的增强Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC Spring4新特性——Groovy Bean定义DSLSpring4新特性——更好的Java泛型操作API Spring4新特性——JSR310日期API的支持Spring4新特性——注解、脚本、任务、MVC等其他特性改进

    版本升级

    spring升级

    目前版本 spring3.0.4

    升级版本 spring4.3.6

    注意 spring-asm相关已经集成到spring-core中,无需重复添加,不然系统会提示报错。

    hibernate升级

    目前版本 hibernate3

    由于以前项目,只有hibernate3.jar这一个,所以替换到它就ok。

    升级版本hibernate4

    一个都不能少,特别是jboss-logging-3.1.3.GA.jar,不要以为它是个废物。

    相关xml文件配置修改:

    <!--注意这里修改为了hibernate4了--> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mappingLocations"> <list> <value>classpath:com/acts/web/*/model/*.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.query.substitutions">true=1,false=0</prop> <prop key="jdbc.use_scrollable_resultset">false</prop> <prop key="hibernate.current_session_context_class"> org.springframework.orm.hibernate4.SpringSessionContext </prop> </props> </property> </bean> <!-- 定义事务注意这里修改为了hibernate4了--> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="save*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="insert*" propagation="REQUIRED" /> <tx:method name="del*" propagation="REQUIRED" /> <tx:method name="remove*" propagation="REQUIRED" /> <tx:method name="change*" propagation="REQUIRED" /> <!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到--> <tx:method name="*" propagation="REQUIRED" read-only="true" /> </tx:attributes> </tx:advice> <aop:config proxy-target-class="true"> <aop:pointcut id="allServiceMethod" expression="execution(* com.acts.*.*.service..*.*(..))" /> <aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice" /> </aop:config>

    相关代码修改:

    如果你之前的dao层是继承了HibernateDaoSupport,你只需要将引入的

    import org.springframework.orm.hibernate3.HibernateCallback;

    修改为

    import org.springframework.orm.hibernate4.HibernateCallback;

    如果hibernate3中使用了executeFind回调方法,请统一修改为execute,hibernate4中已经不支持。相关的SQLException异常信息删除掉即可。

    升级完毕

    至此,启动项目,如果没有错误提示,说明升级ok。

    相关资源:hibernate3升级4必须
    最新回复(0)