leo*_*ora 21 nhibernate fluent-nhibernate
出乎意料的是,当使用nhibernate进行大量更新时,我收到此错误.
行已被另一个事务更新或删除(或未保存的值映射不正确):[MyDomainObject]
错误中没有其他信息.是否有一些建议的方法来帮助确定根本问题,或者有人可以给我一个更好的解释这个错误指示或是一个sympton周围.
我查看了对象,所有数据看起来都很好,它有一个ID等..
请注意,这是在asp.net-mvc网站的单个调用堆栈中运行,因此我不希望在并发性方面存在任何线程问题需要担心.
Jam*_*acs 23
NHibernate有一个对象,我们称之为theObject.theObject.Id有一个值42.NHibernate注意到该对象很脏.对象的Id与unsaved-value不同,对于整数主键,该值为零(0).所以NHibernate发出了一个更新语句,但是没有更新行,这意味着数据库中没有用于该类型对象的Id行42.因此,在没有NHibernate知道的情况下删除了该对象.这可能发生在另一个事务中(例如,您有线程问题)或者某人(或其他应用程序)使用SQL直接针对数据库删除/更改了该行.
另一种可能是你的未保存值是错误的.例如,您-1用于指示未保存的实体,但您的映射的未保存值为零.这是不太可能的,因为您的应用程序通常是从它的声音工作.如果未保存的价值是错误的,你不会已经能够对任何实体保存到数据库,NHibernate的会被发布UPDATE报表时,它应该被发行INSERT.
Fem*_*ref 13
这意味着您有多个事务访问相同的数据,从而产生并发问题.您应该改进数据访问处理,您可能正在从多个线程更新数据,首先将更改的数据联合到一个队列中,该队列处理对数据库的所有访问.
小智 6
一个旧帖子,但希望我的信息可以帮助某人.我添加了一个新对象后,我得到了一个类似的错误,但只有在持久关联时.错误的形式如下:
NHibernate.StaleObjectStateException:行已被另一个事务更新或删除(或未保存的值映射不正确)[My.Entity#0]
注意结尾的零,这是我的标识符属性.当我在SQL Server中使用身份规范(生成器类=本机)时,它不应该尝试使用密钥零进行保存.我没有在我的xml中更改未保存的值,所以我不知道问题是什么; 出于某种原因,NHibernate试图使用键值作为0进行更新而不是为我的新对象保存(并获得下一个键标识).
最后我发现原因是我在构造函数中将新版本的版本号初始化为1!即使我的标识符属性为零,由于某种原因,NHibernate也在寻找零版本属性,以将其标识为未保存的瞬态实例.书中的"NHibernate in Action"确实在第120页提到了这一点,但由于某种原因,我的对象在正常版本号为1时保持正常,并且只有在通过关联保存新对象时才会失败.
因此,请确保未设置版本值(保留为零或为空).
| 归档时间: |
|
| 查看次数: |
24736 次 |
| 最近记录: |