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