【问题标题】:Row deadlock when concurrently modifying different entities with hibernate使用休眠同时修改不同实体时出现行死锁
【发布时间】:2016-12-19 01:35:24
【问题描述】:

我在 wdilfy 10 服务器中使用休眠,我面临以下问题:

有一个父实体Parent,它有一个Child实体的集合,还有一个工作,它加载了一个Parent实体,清除子集合并将新的Child实体放入它。

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

MS-SQL 服务器分析器显示,Child 实体表的一行存在死锁。但是由于Child 没有在Parents 之间共享,并且没有Parent 被多个任务处理,所以Child 表中的任何行都不应该被多个任务访问。

有人有想法吗?

【问题讨论】:

  • 你能分享一些相关的代码和分析器的结果吗?

标签: java sql-server hibernate wildfly deadlock


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 2012-07-16
    相关资源
    最近更新 更多