根据Hibernate Documentation,属性hibernate.order_updates
的详细信息如下:
强制Hibernate按主键值排序SQL更新 正在更新的项目。这将导致更少的事务死锁 在高度并发的系统中。例如是的|假
因此,通过将此属性设置为false,可以发生死锁。请帮助我理解这一点。
答案 0 :(得分:5)
当事务1更新第1行并且事务2同时更新第2行时,可能会发生死锁。现在事务1想要更新第2行,但是必须等待事务2完成,因为它持有写锁定。现在,如果事务2想要更新第1行,它将不得不等待事务1,因为它持有该锁,并且发生死锁。
正如您将注意到的那样,因为事务使用了相反的更新顺序(事务1第一行1然后是第2行,事务2第一行第2行然后第1行)。使用此属性,您可以强制hibernate始终以相同的方式排序,并且不会出现所描述的情况。