我有一些对象,带有hibernate xml (遗留系统):
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="increment" />
</id>
<timestamp name="lastModifiedOn" column="last_modified_on" />
...在servlet中,对象被添加和更新,等等。使用postgresql,servlet可以工作,不会抛出异常。使用MSSQL时,当只有一个用户访问servlet时,会抛出另一个事务更新或删除了行的staleobjectstate异常。
Hibernate SQL显示它在servlet中自己发出update语句。当显式调用hibernate的update方法时,它会抛出错误。
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)update
equipment
set
last_modified_on=?,
created_on=?,
public_id=?,
vendor_id=?,
created_by=?,
last_modified_by=?,
equipment_id=?
where
ID=?
and last_modified_on=?为什么不只是ID呢?数据库中只有ID字段是PK。只有一个用户在访问servlet。
目前,我已经在整个系统中将上次修改的时间戳更改为属性,并且错误消失了。
<timestamp name="lastModifiedOn" column="last_modified_on" />至
<property type="timestamp" name="lastModifiedOn" column="last_modified_on" />然而,现在db (datetime)中的字段last_modified_on不会自动更新到最新的时间,现在包含null,并且必须通过编程来完成,这是一个相当痛苦的更改,即使是在拦截的情况下。
有没有什么方法可以让我仍然使用lastModifiedOn作为时间戳,并摆脱陈旧的对象状态异常。
发布于 2013-09-23 19:34:43
您可以使用版本。
在DAO中,你可以在更新前检查rowversion。
<version name="rowVersion" column="ROW_VERSION" type="java.lang.Long" />https://stackoverflow.com/questions/18955687
复制相似问题