我有两个进程同时访问相同的数据库表。 这两个进程都使用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