随笔 - 175  文章 - 202  trackbacks - 0
<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

第一个Blog,记录哈哈的生活

常用链接

留言簿(16)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

Java links

搜索

  •  

最新评论

阅读排行榜

评论排行榜

batch_size 即同时提交数据的数量,原本与事务并没有什么关系,但如果涉及到同一张表数据的同一种操作,可能就会发生微妙的关系了。

场景如下:
场景一:使用 spring 控制事务,将方法事务配置为 not_supported,向同一张表中插入两条数据,保证第一条数据正常插入,而第二条数据受约束(如唯一约束)插入失败。

预测结果:第一条数据成功,第二条失败。
实际结果:两条数据均失败。
原因:hibernate 将两条插入放到了同一个 batch 中,提交同时失败了。

场景二:同样使用 spring 控制事务,将方法事务配置为 not_supported,向第一张表中插入一条合法数据,成功,向第二张表插入数据,受约束(如唯一约束)插入失败。

预测结果:第一条数据成功,第二条失败。
实际结果:第一条数据成功,第二条失败。
原因:hibernate 分别插入数据并提交,在无事务的情况下,第一条成功,第二条失败。

那么如何让场景一得到预测结果呢,一个简单的解决方法,将 hibernate.jdbc.batch_size 设置为 1,即可。

所以,即使控制了事务,也未必能够得到期望的结果,还需要考虑某些特殊的场景带来的影响。
posted on 2008-03-06 14:18 哈哈的日子 阅读(1822) 评论(2)  编辑  收藏 所属分类: Java

FeedBack:
# re: Hibernate 的 batch_size 与事务[未登录] 2008-03-06 22:55 Doublej
是不是加上:
<property name="jdbc.batch_size">1</property>
我特意试了下.好像还是两条都不成功...  回复  更多评论
  
# re: Hibernate 的 batch_size 与事务 2008-03-07 11:15 哈哈的日子
试一下 hibernate.jdbc.batch_size,看看事务配置,我这边没问题。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: