hibernate添加spring 事务管理注意问题记录
今天弄了一天的hibernate添加事务的问题
首先,建立的是一个java工程,把hibernate添加进工程里,很容易就可以写一个增删改查的方法。索性就多加点东西,把接口,抽象类也加到里面,自己看着也舒服点,然后写的时候了,想把spring的功能加进来,想利用spring的aop配置事务,做到事务层配置可控制到service层,这样的话,就可以专注业务实现,一个业务方法就是一个事务。
首先看配置好的application.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
"><bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
</bean><bean id="iStudentDAO" class="com.wxw.model.StudentDAO">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="studentServiceImpl" class="com.wxw.service.StudentServiceImpl">
<property name="iStudentDao" ref="iStudentDAO"></property>
</bean><bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean><tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice><!-- 事务控制在service层 -->
<aop:config>
<aop:pointcut id="interceptorPointCuts" expression="execution(* com.wxw.service.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" />
</aop:config></beans>
注意点:
- 自己定义的bean一定要是接口的形式,为什么了,因为spring的配置针对的接口,如果bean配置的实体类,会出现异常
- 自己定义的bean也不能是abstract类,否则一样是报错。也不能在abstract类里注入接口等一些操作了
- 添加spring aop需要添加对应的jar包外,还需要在xml头部加一些xsd信息,否则编译器会报错,这个是常识性的问题,但却很隐蔽,还有别把头信息版本搞错了,虽然有时候3.0和3.1的版本中有细微的差别,一旦出问题,那可是致命的,找都无法找。
- 定义aop:config里的expression的信息时,一定要写对execution()这里面的表达式,这个是有讲究的,自己好好注意一下
- 然后是sessionFactory的问题,只能定义一个sessionFactory,别初始化一次,然后又注入一次,两个不同的session事务就不执行了,我测试了一下,确实是不能成功,都生成了sql语句了,但是事务却没有提交成功,而且执行起来,两条sql时间间格差很多,有2秒钟左右,我写的保存语句就是连着写的,本来应该是同一时间出现的。所以,这点也要有明确的思维

- 然后就是保存时候的问题,自己加transation加在代码里,能够提交成功,但配置的事务就是没起作用,肯定是配置写的不对,仔细检查。然后就是一直报save is not valid without active transaction这个错误,我试了好多办法,终于在一个论坛找到了,把hibernate.cxf.xml文件里的一个<property name="hibernate.current_session_context_class">thread</property>注释掉便可,前提是你其他的方的配置写正确了。这个地方原来是hibernate原因网上说的是跟spring接管事务的起冲突了,按照我的理解就是spring接管了hibernate的所有数据访问配置
- 事务对RuntimeException默认是会回滚的,而且还不能把这个异常用try捕获,否则事务先提交的一样会成功,后提交的也一样会成功,只有throw了之后就事务就会回滚
- 最后的最重要的一点就是,遇到错误不要慌,虽然我也花了整整一天时间,最少有7-8个小时才把这个问题解决,一定要沉住气,哪里出错,先想想,一些明显的错误,上网一查,基本上都能解决,有些问题肯定是你需要花时间去想的,好了,问题解决,花了这么多时间,难得,感觉不错!
hibernate添加spring 事务管理注意问题记录的更多相关文章
- Spring事务管理(转)
1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是 ...
- Spring 事务管理高级应用难点剖析--转
第 1 部分 http://www.ibm.com/search/csass/search/?q=%E4%BA%8B%E5%8A%A1&sn=dw&lang=zh&cc=CN& ...
- 【转】Spring事务管理
原文链接 在 Spring 中,事务是通过 TransactionDefinition 接口来定义的.该接口包含与事务属性有关的方法.具体如清单 1 所示: 清单 1. TransactionDefi ...
- Spring事务管理(详解+实例)
1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是 ...
- 【Spring】11、Spring事务管理
写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: ...
- spring事务管理(详解和实例)
原文地址: 参考地址:https://blog.csdn.net/yuanlaishini2010/article/details/45792069 写这篇博客之前我首先读了<Spring in ...
- (转)Spring事务管理(详解+实例)
文章转自:http://blog.csdn.net/trigl/article/details/50968079 写这篇博客之前我首先读了<Spring in action>,之后在网上看 ...
- spring入门到放弃——spring事务管理
Spring事务提供了两种管理的的方式:编程式事务和声明式事务 简单回顾下事务: 事务:逻辑上的一组操作,组成操作的各个单元,要么全部成功,要么全部失败. 事务特性: 原子性:一个事务包含的各个操作单 ...
- Spring 事务管理高级应用难点剖析: 第 2 部分
本文是“Spring 事务管理高级应用难点剖析” 系列文章的第 2 部分,作者将继续深入剖析在实际 Spring 事务管理应用中容易遇见的一些难点,包括混合使用多种数据访问技术(如 Spring JD ...
随机推荐
- Mac下一个/usr/include失踪
Mac升级到Yosemite后,突然发现vim的YouCompleteMe代码提示所以空头支票成员,排查了一下,原本/usr/include目录中缺少.所有的C/C++头文件不见了. .. 第一次发现 ...
- c语言mysql api
原文:c语言mysql api 1.mysql_affected_rows() //返回上次UPDATE.DELETE或INSERT查询更改/删除/插入的行数. 2.mysql_ ...
- :link,:visited,:focus,:hover,:active详解
原文::link,:visited,:focus,:hover,:active详解 CSS 又名 层叠样式表,所谓层叠,就是后面的样式会覆盖前面的样式,所以在样式表中,各样式排列的顺序很有讲究. ...
- unity资源
unity资源集中贴 1.unity经验之谈 http://jingyan.baidu.com/article/19192ad820f17be53e570715.html 2.百度网盘,分享了一点模型 ...
- 用持续集成工具Travis进行构建和部署
用持续集成工具Travis进行构建和部署 用持续集成工具Travis进行构建和部署 摘要:本文简单说明了如何使用持续集成工具Travis进行构建和部署的过程. 1. 概述 持续集成(Continuou ...
- jQuery EasyUI API - Layout - Layout[原创汉化官方API]
最近在学习jQuery EasyUI,发现中文的文档好少,部分文档不错但它是鸟语的,为了大家也为了自己学习吧,汉化做一下笔记. 有没有说清楚的,或者翻译不正确的地方还请大家谅解指出.. 由于工作时间原 ...
- Spring IOC 之ApplicationContext的其他功能
正如上面章节所介绍的那样, org.springframework.beans.factory 包提供了管理和操作beans的 基本功能. org.springframework.context包增加 ...
- 使用SQL Server 2005数据库管理工具 - 初学者系列 - 学习者系列文章
本文讲述使用SQL Server 2005 Express数据库管理工具的使用. 1.打开数据库管理工具 2.选择下面的SQL Server 身份验证,因为在安装数据库的时候设置了sa的密码. 3.选 ...
- js实现文字横向滚动
页面布局 <div id="scroll_div" class="fl"> <div id="scroll ...
- scala lift环境搭建
Intellij IDEA + scala插件 工欲善其事,必先利其器! 学习scala已经有一段时间了,对scala这门语言爱不释手,但同时也为scala糟糕的IDE工具支持感到懊恼(我是一个100 ...