Hibernate @Version Field错误

时间:2009-05-01 10:35:37

标签: java hibernate

我正在为我的应用程序使用hibernate,spring,struts框架。

在我的应用程序中,每个表都有一个名为Version的字段,用于跟踪任何记录的更新。

每当我更新版本为0的我的Country表的现有记录时,它都可以正常工作。更新记录将版本字段更新为1。

但每当我尝试更新该版本1记录时,它会给出如下错误:

org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Object of class [com.sufalam.business.marketing.model.bean.Country] with identifier [3]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.company.business.marketing.model.bean.Country#3]

有什么办法可以解决吗?

3 个答案:

答案 0 :(得分:3)

Hibernate的版本列允许您实现optimistic concurrency control

每次更新对象时,Hibernate都会检查存储在数据库中的版本值是否与对象中的版本值相同。如果两者不同,则抛出StaleObjectStateException,这意味着其他人已经更新了对象,同时加载,编辑和存储了当前会话。

您必须确保对象中的版本值设置为正确的值。有时,如果您从会话中分离对象并重新附加它们(合并),则值版本列设置不正确(例如,在从表单中检索值时在Web应用程序中)

答案 1 :(得分:0)

“行已被其他交易更新或删除”。上次我收到这个时,我正在做的事情分布在多个org.hibernate.Session对象上。

答案 2 :(得分:0)

我不记得确切,但你应该坚持你保存的实例吗?至少在使用JPA时,合并方法有一个返回值。