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

Cha*_*nya 2 java hibernate

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

强制Hibernate按要更新的项的主键值对SQL更新进行排序.这将导致高度并发系统中更少的事务死锁.例如,真的 假

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

Maa*_*els 5

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

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