使用hibernate同时修改不同实体时出现行死锁

时间:2016-08-12 06:18:58

标签: java sql-server hibernate wildfly deadlock

我在wdilfy 10服务器中使用hibernate,我遇到了以下问题:

有一个父实体Parent,它有一个Child个实体的集合,并且有一个作业,可以加载一些Parent个实体,清除子集合并放置新的Child个实体。

当此任务多次并发执行时,即使每个任务正在处理自己的Parent实体列表,偶尔也会发生死锁,我不明白这是怎么发生的。

MS-SQL服务器探查器显示Child授权表的行上存在死锁。但由于ChildParent之间没有Parent共享由多个ond任务处理,因此Child表的任何行都不应被多个访问完全没有任务。

有人有想法吗?

1 个答案:

答案 0 :(得分:1)

尝试使用重试逻辑。当我知道其他进程可能锁定我的代码使用的一些资源时,我通常会重复尝试三次。如果这对您没有帮助,那么您需要查看死锁图。

获取死锁图以便精确定位死锁的发生。您可以从SQL Server Profiler获取死锁图。在Locks部分找到死锁图,死锁或死锁链。