Hibernate 事务提交sql语句的顺序
2014-03-27 13:35
435 查看
最近做的项目有一个很麻烦的业务,一个操作里包含了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,分别处理可以分开写的业务。
不知这样是否会出现问题,先记录下,如果执行的时候出现问题再来更正。
也请看到的大虾们指点。
分享:
2
喜欢
阅读(783)┊
评论 (2)┊
收藏(0)┊转载(0)
┊喜欢▼┊打印┊举报
前一篇:VMware按装centos
后一篇:jsp参数过滤防注入的解决方法
评论
重要提示:警惕虚假中奖信息|
[发评论]
新浪网友
打两个transaction会有很大的问题
2010-9-13 14:21回复(0)
新浪网友
如果第一个transaction提交成功,第二个没有提交成功,则第二个会回滚,但第一个已经被保存到数据库中,数据没有进行同步操作。
一开始起在一个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,分别处理可以分开写的业务。
不知这样是否会出现问题,先记录下,如果执行的时候出现问题再来更正。
也请看到的大虾们指点。
分享:
2
喜欢
阅读(783)┊
评论 (2)┊
收藏(0)┊转载(0)
┊喜欢▼┊打印┊举报
已投稿到: | 排行榜 |
---|
后一篇:jsp参数过滤防注入的解决方法
评论
重要提示:警惕虚假中奖信息|
[发评论]
新浪网友
打两个transaction会有很大的问题
2010-9-13 14:21回复(0)
新浪网友
如果第一个transaction提交成功,第二个没有提交成功,则第二个会回滚,但第一个已经被保存到数据库中,数据没有进行同步操作。
相关文章推荐
- Hibernate 事务提交sql语句的顺序
- Hibernate 事务提交sql语句的顺序
- Hibernate 事务提交sql语句的顺序
- hibernate事务提交执行sql顺序
- Db2查看未提交的事务开始时间、占用日志空间大小、应用IP地址、执行的SQL语句等信息
- NHibernate问题 flush-mode 一个事务中重复提交更新的SQL语句
- oracle 中--怎么查看当前表空间在作什么操作?--查锁,死锁,当前执行时间长的Sql语句,没提交的事务,对象为哪些进程所用
- C# 启用事务提交多条带参数的SQL语句实例代码
- SSH 框架中 service 里面有 sql 和 对象存储,执行顺序问题 Spring 事务提交顺序
- 使用Hibernate的session执行任意SQL语句以及整个事务
- 使用Hibernate的session执行任意SQL语句以及整个事务
- oracle 中--怎么查看当前表空间在作什么操作?--查锁,死锁,当前执行时间长的Sql语句,没提交的事务,对象为哪些进程所用
- Spring事务中Hibernate语句执行的顺序
- 事务控制语句,begin,rollback,savepoint,隐式提交的SQL语句
- Oracle sql语句执行顺序
- SQL语句执行顺序及MySQL中limit的用法
- Mingyang.net:格式化Hibernate的SQL输出语句
- hibernate使用sql语句查询实体时,要写上addEntity
- Hibernate 执行原始SQL语句
- hibernate出现打印SQL语句读取不到值的情况的解决