hibernate delete update 失效问题

 最近在搭建一个springmvc+hibernate+spring框架的时候,发现hibernate的Session操作delete和update不行了,根本就无效,要执行session.flush()才能执行sql语句。session原理:其实我们执行session更新和删除操作的时候,不会立即执行,要执行flush才可执行。但是如果配置了事务管理,这件事就可以交给事务管理器去完成,在事务提交的时候执行自动执行flush语句。

  为了确定是否是事务问题,我把事务配置注释掉了,问题还是原来那样子,所以我就一直去更改事务管理配置,更改了五种事务管理方法。一次又一次的检查,但是还是无效。确定了事务问题,但是事务配置有没有错误,奔溃了。

  错误原因:是配置出现了问题:

 

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <!-- 加载所有的配置文件 -->  
  2.     <context-param>  
  3.         <param-name>contextConfigLocation</param-name>  
  4.         <param-value>classpath*:config/spring/*.xml</param-value>  
  5.     </context-param>  

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <servlet>  
  2.         <servlet-name>springMVC</servlet-name>  
  3.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.         <init-param>  
  5.             <param-name>contextConfigLocation</param-name>  
  6.             <param-value>classpath*:config/spring/spring-mvc.xml</param-value>  
  7.         </init-param>  
  8.         <load-on-startup>1</load-on-startup>  
  9.     </servlet>  

 一开始就加载了所以配置,后面servlet初始化的时候又加载了springmvc.xml。这本身就是不合理了的。但是主要问题不是这个。问题是:spring-mvc.xml由servlet加载的时候,

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <!-- 扫描基础控制器注解-->    
  2.     <context:component-scan base-package="com.tgb" />   
如果一开始就注册所有的注解,那么,遇到@service的时候,事务配置就很可能无效,尤其是@Transactional一定失效。所以事务配置就不管用。


解决方案:分开加载控制器和其他注解。控制器的注解由springmvc.xml加载,

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <!-- 扫描基础控制器注解-->    
  2.     <context:component-scan base-package="com.tgb.controller" />   
spring配置文件中,加载其他注解:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <context:component-scan base-package="com.tgb.*">  
  2.       <context:exclude-filter type="regex" expression=".*controller$"/>  
  3.    </context:component-scan>  
  4.      
  5. <tx:annotation-driven transaction-manager="transactionManager" />  
这样,事务配置就能起作用了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值