[转]NHibernate.StaleObjectStateException: Row was updated or deleted by another transaction

NHibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.test.Contract.Entities.JobManagementDat#JBID000953]

場所 NHibernate.Persister.Entity.AbstractEntityPersister.Check(Int32 rows, Object id, Int32 tableNumber, IExpectation expectation, IDbCommand statement)

場所 NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Object[] oldFields, Object rowId, Boolean[] includeProperty, Int32 j, Object oldVersion, Object obj, SqlCommandInfo sql, ISessionImplementor session)

場所 NHibernate.Persister.Entity.AbstractEntityPersister.UpdateOrInsert(Object id, Object[] fields, Object[] oldFields, Object rowId, Boolean[] includeProperty, Int32 j, Object oldVersion, Object obj, SqlCommandInfo sql, ISessionImplementor session)

場所 NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Int32[] dirtyFields, Boolean hasDirtyCollection, Object[] oldFields, Object oldVersion, Object obj, Object rowId, ISessionImplementor session)

場所 NHibernate.Action.EntityUpdateAction.Execute()

場所 NHibernate.Engine.ActionQueue.Execute(IExecutable executable)

場所 NHibernate.Engine.ActionQueue.ExecuteActions(IList list)

場所 NHibernate.Engine.ActionQueue.ExecuteActions()

場所 NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session)

場所 NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event)

場所 NHibernate.Impl.SessionImpl.Flush()

場所 com.test.DataAccess.BaseDAO.Commit()

偶遇这样的问题,正常来说,提示的消息已经很直观了:记录被其它的事务更新或删除了。但当时只有自己在测试,难道事务用错了?

反复检查后发现:偶要更新的一组表中有使用trigger的,当某个表更新时,会根据条件来更新偶要更新的表,结果造成偶在使用nhibernate.Session.SaveOrUpdate方法更新记录时,出现上面的异常。