order_updates属性如何避免Hibernate中的死锁

时间:2014-08-05 19:23:29

标签: java hibernate

根据Hibernate Documentation,属性hibernate.order_updates的详细信息如下:

  

强制Hibernate按主键值排序SQL更新   正在更新的项目。这将导致更少的事务死锁   在高度并发的系统中。例如是的|假

因此,通过将此属性设置为false,可以发生死锁。请帮助我理解这一点。

1 个答案:

答案 0 :(得分:5)

当事务1更新第1行并且事务2同时更新第2行时,可能会发生死锁。现在事务1想要更新第2行,但是必须等待事务2完成,因为它持有写锁定。现在,如果事务2想要更新第1行,它将不得不等待事务1,因为它持有该锁,并且发生死锁。

正如您将注意到的那样,因为事务使用了相反的更新顺序(事务1第一行1然后是第2行,事务2第一行第2行然后第1行)。使用此属性,您可以强制hibernate始终以相同的方式排序,并且不会出现所描述的情况。