首先,让我们暂时不考虑Hibernate。假设我有两个表A & B。两个交易正在更新这两个表中的相同记录,但txn1先更新B再更新A,而txn2则先更新A再更新B。这是典型的死锁示例。避免死锁的最常见方法是预先定义获取资源的顺序。例如,我们应该先更新表A,然后再更新B。
回到Hibernate。当我们在一个会话中更新大量实体时,一旦我刷新会话,不同实体的更改将生成相应的插入/更新/删除语句到数据库中。Hibernate是否有一些算法来决定实体之间更新的顺序?如果没有,Hibernate用什么方式来防止第1段描述的死锁情况?
如果Hibernate正在维护顺序,那么我怎样才能知道或控制顺序?我不希望我的显式更新与Hibernate冲突,并导致死锁。