事务的特性..
一、首先,事务并不不能简单地理解让你的sql可不可以执行。就说事务的原子性,即可以说事务是数据库查询的基本单元(而不是一条语句),要么在事务的语句全部执行,或者全部都不执行。
比如:现在我需要删除一个班级Class记录,和这个班级对应的全部学生Student记录。那么我就应该写两条删除语句delete from Student where cid = ?和delete from Class where cid = ?
-
如没有事务处理,这时候出现删除学生没问题,但是删除班级出现问题,那么就会出现班级记录的冗余数据,使得数据库数据的不完整性。这是不愿意看到的。
-
如果加了事务处理呢,一条语句出错,就会进行事务回滚,使得全部恢复操作之前的数据,这就是要么全部执行,要么都不执行,保证数据的完整性。
二、hibernateTemplate的问题
hibernateTemplate是spring中的hibernate操作模板,它封装了session,那么session对象是什么时候关闭的呢。
-
如果使用了数据源(数据源肯定要使用的),那么session是不会关闭的(session就是jdbc的connection),而只是会有一个 false赋值给一个包含有session的一个内部类(相当于C语言的结构体,c3p0是这么做的,其他数据源包应该也差不多)表明这个session 是空闲的。
-
那么什么时候会使当前的session标识空闲呢,这个就要看你的spring配置文件是怎么配置的了。一般在spring都是使用aop的事务管理,具体,你可以去看下这方面的知识点。比如一下(aop事务管理不完整片段)
<aop:config> <aop:pointcut id="bussinessService" expression="(execution(public * com.study.service..*.*(..)))" /> <aop:advisor pointcut-ref="bussinessService" advice-ref="txAdvice" /> </aop:config>
待续..
鸣谢:http://zhidao.baidu.com/link?url=VvNy0poIdw5buQ7vNuuq-ZdMsOvXjTVDM4JlI0YBD6uAnAIxehx3yT2CwxPSWJ2D0h2Vbw0RhusfyF2orDd2T_