2009-05-01 58 views
2

我对我的应用程序使用了hibernate,spring,struts框架。Hibernate @Version Field error

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

每当我更新其version 0我的国家表中的现有记录,它工作正常&更新记录更新版本字段为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] 

有没有什么办法可以解决它?

+0

您可以发布您的代码吗? – 2009-05-01 12:12:46

回答

3

Hibernate的版本列允许您执行optimistic concurrency control

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

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

0

“行被更新或被其他事务删除”。上次我收到这个消息时,我正在做的事情遍及多个org.hibernate.Session对象。

0

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

相关问题