Spring 4 MVC + Hibernate 4集成

集成背景:java

基于当前使用的项目是spring3和hibernate3 因此打算升级一下Spring版本和Hibernate的版本。git

集成中遇到的问题。集成中遇到了这位博客友人遇到的一切问题,苦苦寻找问题了2天终于找到解决了。web

问题1:spring

Hibernate4 中推荐使用  Session session = sessionFactory.getCurrentSession();来获取Session进而进行数据的增删改查。express

Could not obtain transaction-synchronized Session for current thread;

针对这个问题,我在网上发行也出现了好多个,有经过在类或者方法上添加 @Transactional解决的,我尝试了不行;后来我尝试下面的方法,在web.xml添加以下配置spring-mvc

<filter>
<filter-name>SpringOpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SpringOpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 

可是这样配置 貌似能够正常获取到Session 可是事务没有开启,对应 update和delete之类的方法不提交事务。后来我又接着查找问题,在项目上反复进行事务开启的测试 无论是使注解仍是声明式 都没法开启事务(这里主要是在运行中的项目测试 致使 采用声明式事务的时候 没有把 注解的给去掉  以致于走了弯路,还觉得声明式也不行)session

后来 我下载了一个网上集成的好的例证,我运行了一下;发现能够正常获取session 而且不须要SpringOpenSessionInViewFilter的配置。mvc

而后我就仔细研究了一下配置,发现他采用的是xml方式定义的bean 而且能够正常 开启事务,我就逐步改成注解方式注入bean。当我采用注解的时候 发现不行,事务开启不了;后来我就继续看配置文件。终于找到问题缘由:在两个xml配置文件中  视图的配置文件(spring-mvc.xml)和 hibernate的配置文件(spring-hibernate.xml)都进行包的全局扫描 而没有进行过滤,原本视图的配置文件应该仅仅扫描注解为@Controll的类,致使事务开启不了;而后把两个配置进行过滤扫描便可 也能够正常开启事务并回滚事务。app

视图配置文件的Controll的过滤框架

<context:component-scan base-package="com.lei.demo"  use-default-filters="false" >
      <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
</context:component-scan>

数据源-各类Bean及事务配置的过滤

<context:component-scan base-package="com.lei.demo">
	  <context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
</context:component-scan>

 

至此  通过两天的解决问题并集合成功   终于能够正常获取session和开启事务了。

心得:当遇到项目要进行框架升级时,建议先用一个demo来进行框架配置,等配置基本和项目的框架配置同样了,再进行项目框架的升级,否则会有N个坑等着你。以前对事务研究的少  经过此次集成 又一次深刻研究了spring框架和注解事务的注意事项。

其余的尝试解决方法:

在hibernateProperties中增长

hibernate.current_session_context_class = org.springframework.orm.hibernate4.SpringSessionContext

后来我发现彻底多余  由于对于Hibernate4 的sessionFactory 默认就是这个。

框架的Demo 源代码下载地址:git项目下载

若有问题能够加群   号:367523618   一块儿讨论。

相关文章
相关标签/搜索