项目记录:spring+springmvc 项目中 @Transactional 失效的解决方法

第一步,修改spring的配置文件和springmvc的配置文件

--------------------------------applicationContext.xml

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

--------------------------------applicationContext-mvc.xml

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

解释:SpringMVC配置文件产生的环境是Spring环境的子环境,会有一些冲突:SpringMVC的环境会接管Service注解,而这会使transactional失效。

所以我们要做的就是在把Service注解排除出SpringMVC环境(exclude-filter),这样就可以让其交给Spring环境处理了,就不会让Transactional注解失效了;同时Spring配置中排除Controller注解,让其交给SpringMVC环境去处理;

第二步,修改Spring配置文件中hibernate的属性设置

在@Transactional注解的方法中,session的获取通常是通过sessionFactory.getCurrentSession()来获取的。而通常对应的hibernate属性设置是如下:

<prop key="hibernate.current_session_context_class">thread</prop>

报错中,得不到 active transaction ,通常就是这个设置错误。改为如下即可:

<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>

详情请查看该文 如果你报createSQLQuery is not valid without active transaction,请看这里

第三步,查看是否漏掉开启注解的配置

<tx:annotation-driven transaction-manager="txManager" />

txManager是自定义的已配置好的事务管理器。

另外,DaoImpl类上用@Repository注解,ServiceImpl类上用@Service注解。

只要注意以上三步,一般就可以解决@Transactional注解失效的问题了。

该文也可以参考 http://www.verydemo.com/demo_c143_i3007.html

PS:进一步思考,@Transactional加在@Service注解的类的方法中,就应该在springmvc配置文件中exclude-filter

如果加在@Repository注解的类中的方法中,也应该还exclude-filter org.springframework.stereotype.Repository 应该是这样,未测试。

项目记录:spring+springmvc 项目中 @Transactional 失效的解决方法,布布扣,bubuko.com

时间: 2024-10-02 12:57:10

项目记录:spring+springmvc 项目中 @Transactional 失效的解决方法的相关文章

Microsoft Visual Studio 2008 在文件中查找 失效的解决方法

1: 暂时的解决办法是,在'在文件中查找'按钮边上的下拉框中输入要查询的东西,然后回车 2: 选择窗口的重置窗口布局.(该方法解决了我的问题,原因分析大概是 弹出的窗口被别的挡住了) 3: 修复Microsoft Visual Studio 2008

用Eclipse 搭建一个Maven Spring SpringMVC 项目

1: 先创建一个maven web  项目: 可以参照之前的文章:  用Maven 创建一个 简单的 JavaWeb 项目 创建好之后的目录是这样的; 2: 先配置maven  修改pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="htt

项目记录:springmvc+freemarker 实现国际化

第一步,在SpringMVC的配置文件中,添加如下支持国际化的两段配置 <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="useCodeAsDefaultMessage" value="true" /> <property

项目记录:springmvc forward redirect 问题

@RequestMapping("/redirect")public String redirect(RedirectAttributes redirectAttributes){redirectAttributes.addFlashAttribute("test", "testdata"); //专供此种情况下使用.return "redirect:read";} 注意:此种情况下,网址会跳转的同时,还携带着一个名字为“te

记录Spring.net学习中遇到的各种问题

1.由于项目中使用了spring.net作为IOC容器,所以看了下相应的博客,熟悉一下这方面的内容,参照博客为博客园刘冬的博客系列: 博客地址:http://www.cnblogs.com/GoodHelper/archive/2009/10/25/1589554.html 在写Demo的过程中,遇到的第一个问题是在访问Object时候,报出了以下异常: 网上查了下得到如下解决方案: 选中Object.xml文件,右键选中属性,在属性对话框中做如下操作: 于是顺带查了下生成操作的各个属性,以便了

创建django项目出现AttrbuteError module &#39;pip&#39; has no attribute &#39;main&#39;解决方法

由于升级pip到10.0,创建django出现AttrbuteError module 'pip' has no attribute 'main'错误,解决方法有两种 一:找到/Applications/PyCharm.app/Contents/helpers/packaging_tool.py在头部加上 import pip._internal as pip_new 然后分别修改文件中的这两行中的pip return pip.main(['install'] + pkgs) return pi

jquery中checkbox全选失效的解决方法

这篇文章主要介绍了jquery中checkbox全选失效的解决方法,需要的朋友可以参考下 如果你使用jQuery 1.6 ,代码if ( $(elem).attr(“checked”) ),将获得一个属性(attribute) ,它不改变该复选框被选中和选中.它只是用来存储默认或选中属性的初始值.为了保持向后兼容,.attr() 方法从 jQuery 1.6.1+ 开始除了返回属性值外,还会更新 property 属性,因此 boolean attribute(布尔属性)不需要通过 .prop(

eclipse部署的web项目没有添加到Tomcat的webapps目录下解决方法

eclipse没有像myeclipse那样,添加web项目时会自动部署到Tomcat的webapps目录下. 而是部署到了eclipse的.metadata\.plugins\org.eclipse.wst.server.core\tmp0或.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps下. 我们就是的思路就是改变web项目部署的地址 解决方法如下 参考文章:https://blog.csdn.net/woshixuy

【php】thinkphp以post方式查询时分页失效的解决方法

好久没有写博客了,最近说实话有点忙,各个项目都需要改bug.昨天晚上一直没有解决的php项目中的bug,就在刚才终于搞定,在这里还需要感谢博客园大神给的帮助! 具体问题描述 最近遇到一个非常棘手的问题,也是因为刚入手thinkphp.在做项目的过程中,因为需要非常多的查询条件,如果以get方式提交表单的话,会因为url长度限制而报错,所以必须使用post方式提交表单数据,但是在分页的过程中,遇到了问题,因为thinkphp自带的分页是以a标签的形式,进行下一页的,这样查询条件就没有传入后台,导致