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 ...
随机推荐
- Linux 经常使用 性能 检测 命令 说明
1.uptime [root@smgsim02 ~]# uptime 15:08:15 up 98 days, 4:19, 2 users, load average: 0.07, 0.29, ...
- MySQL的备份与还原
原文:MySQL的备份与还原 MySQL备份和还原,都是利用mysqldump.mysql和source命令来完成的. 1.Win32下MySQL的备份与还原 1.1 备份 开始菜单 | 运行 | c ...
- 我的MYSQL学习心得(十三)
原文:我的MYSQL学习心得(十三) 我的MYSQL学习心得(十三) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYS ...
- 错 'Cannot run program "/home/uv/IDE/adt/sdk/platform-tools/adb": error=2, No such file or directory
为linux平台搭建android开发环境的人,您可能会遇到问题,如下面有: 64位置linux安装64位置eclipse和64位置jdk开场后eclipse错误后 ""Canno ...
- [Android] Volley源代码分析(五岁以下儿童)Q \\ u0026一个
Volley源代码分析系列那里一段时间,告诉我,有许多私人留言,同时一些问题抛出.对于一些简单的问题,我们跳,这两天被连接到朋友@smali提出的问题.告诉我你不得不赞叹查看源代码时的详细程度,大家一 ...
- 警惕使用WebClient.DownloadFile(string uri,string filePath)方法
原文:警惕使用WebClient.DownloadFile(string uri,string filePath)方法 WebClient.DownloadFile(string uri,string ...
- 页面loading提示效果
前言: 现在做页面一般为了提示友好点,一般会做个页面正在加载的loading提示效果,当页面加载完毕后再显示内容!这个时候就需要监控页面的资源加载的情况,有时候这并不好做,因为页面涉及图片,视频,已经 ...
- SSMS2008插件开发(4)--自定义菜单
原文:SSMS2008插件开发(4)--自定义菜单 打开上次的项目MySSMSAddin中的Connect类,发现该类继于了两个接口:IDTExtensibility2和IDTCommandTarge ...
- js根据IP地址判断城市
var province = '' ;var city = '' ;jQuery.getScript("http://int.dpool.sina.com.cn/iplookup/iploo ...
- Oracle数据库面试题
1.取出表中第31到40行的记录 mysql方案:select * from t order by id limit 30,10 oracle方案: select t2.* from (select ...