我有兩個進程同時訪問相同的數據庫表。 這兩個進程都使用NHibernate-3.2.0。 一個進程刪除行,另一個進程將行插入到相同的表中。 當兩個進程並行工作時,我在「INSERT」進程中收到死鎖錯誤。當兩個進程訪問數據庫時NHibernate事務死鎖
[錯誤] TID:6 NHibernate.Util.ADOExceptionReporter - 事務(進程ID 64)在另一個進程鎖死資源上死鎖,並被選爲死鎖犧牲品。重新運行交易。
該插入在事務內部執行爲session.Save(obj)。 對象ID有Guid類型,生成器類是「guid.comb」。
看起來好像NHibernate試圖處理這種情況,執行多次插入行的嘗試。在NHibernate sql日誌文件中,我看到與同一個ID相同的表的INSERT語句的數量。
而下面是下一個錯誤: [錯誤] TID:6 Hibernate.Util.ADOExceptionReporter - 違反PRIMARY KEY約束。
問題:
- 是否有可能阻止我scenarion死鎖情況由 NHibernate的別的技能?
- 可以防止從NHibernate到 執行多行嘗試插入行處理問題我的代碼(NHibernate外部) ?
在此先感謝,當兩個或多個進程都在等待訪問已被其他進程持有資源發生
這兩個進程是否使用相同的NHSession?你在使用交易嗎?你什麼時候提交或沖洗? – 2014-12-03 14:03:47