Hibernate 事务提交sql语句的顺序
来源:互联网 发布:淘宝如何卖花茶 编辑:程序博客网 时间:2024/06/05 17:47
Hibernate 事务提交sql语句的顺序
最近做的项目有一个很麻烦的业务,一个操作里包含了insert,update,delete,select动作。
一开始起在一个hibernate事务里,发现在入库的时候有的时候数据对不上,后来查了下资料才知道hibernate事务提交sql语句的顺序并不是按照程序里写的顺序提交的。
总的说应该是按insert、update、delete的顺序。
具体的顺序查了下应该是:
涉及的SQL语句会按照下面的顺序发出执行:
所有对实体进行插入的语句,其顺序按照对象执行Session.save()的时间顺序
所有对实体进行更新的语句
所有进行集合删除的语句
所有对集合元素进行删除,更新或者插入的语句
所有进行集合插入的语句
所有对实体进行删除的语句,其顺序按照对象执行Session.delete()的时间顺序
为什么会出现这种情况呢,原因是hibernate不会把sql语句直接提交给数据库,而是先放在hibernate的缓存中等事务commit的时候一起提交,这样就导致sql语句执行的顺序与程序不一致。
解决办法:
用session.flush();把sql语句刷入数据库。
比如想要执行delete语句的时候就在createQuery后面执行下session.flush();
而且在大批量数据处理的时候,可能需要分批刷出数据,然后清空缓存,以减少内存占用量。
我用的方法是在同一个session里打开两个transaction,分别处理可以分开写的业务。
不知这样是否会出现问题,先记录下,如果执行的时候出现问题再来更正。
也请看到的大虾们指点。
文章出处:http://blog.sina.com.cn/s/blog_4586764e0100ip2d.html
- Hibernate 事务提交sql语句的顺序
- Hibernate 事务提交sql语句的顺序
- Hibernate 事务提交sql语句的顺序
- Hibernate 事务提交sql语句的顺序
- hibernate事务提交执行sql顺序
- Hibernate的事务提交
- Spring事务中Hibernate语句执行的顺序
- Hibernate的事务提交(ZZ)
- Hibernate 事务管理器的事务提交
- 查找客户端未提交的事务语句
- oracle链接SQLSERVER,事务语句的提交
- Hibernate中Transaction事务的批量提交
- 看事务的sql语句
- HIBERNATE 事务提交
- Hibernate事务未提交
- 二、hibernate提交事务
- SQL语句的执行顺序
- SQL语句的执行顺序
- js计算字符串长度;并截取字符串
- [T]动态加载控件_常见问题解决之道-001
- Unable to load configuration. - [unknown location]
- 单片机什么叫位寻址?/不可位寻址?
- lpc1768的iap不好使
- Hibernate 事务提交sql语句的顺序
- Android JNI JNINativeMethod register
- C#通用数据库操作类 支持Access/MSSql/Orale/MySql等数据库
- java异常
- Unity3D 游戏贴图(法线贴图,漫反射贴图,高光贴图)
- MyEclipse发布项目报错Undefined exploded archive location
- ios 拨打电话 挂断后直接返回程序
- 一种记录最近几次搜索记录的实现方法
- 二叉树的深度 面试之27