【发布时间】:2017-04-03 18:46:09
【问题描述】:
使用 Java、Hibernate 和 Oracle 数据库。 我有两个并发进程:
- Process1 从 table1 中删除一些实体。 (multiple: delete from table1 where id =...) 由本地休眠查询完成。
- Process2 更新 table1 中的 SAME/其他实体。 (multiple: update table1 set name=... where id=...) 由 jpa repository delete 方法完成。
目前有时异常
抛出CannotAcquireLockException,
(SQL 错误:60,SQLState:61000..
ORA-00060: 等待资源时检测到死锁)
所以,问题是:发生了什么以及如何避免异常?有什么解决方法吗?
重要提示:如果发生冲突,如果删除成功并且更新不会做任何事情,我会很满意。
【问题讨论】:
-
您不认为minimal reproducible example 会有所帮助吗?如果您查看从死锁生成的 oracle 跟踪文件,它将为您提供有关导致问题的所有详细信息。
-
我认为我对问题的描述已经足够好了。如果我有一个 Java 代码可以在任何 oracle 数据库上 100% 出现此错误,我肯定会提供给您。