OptimisticLock尝试再次更新同一个对象

时间:2013-08-23 15:22:21

标签: hibernate transactions ejb jboss7.x optimistic-concurrency

我收到以下异常:

org.hibernate.StaleObjectStateException:行已被另一个事务更新或删除(或未保存的值映射不正确):[

当我尝试再次使用Form更新对象时,会发生这种情况。因此,它第一次运行良好,但当我尝试再次更新同一个对象时,我得到了那个例外。

会话中是否可以刷新?

这是我的实体
     @PersistenceContext(unitName = "JPAService", type = PersistenceContextType.EXTENDED) private EntityManager nasc;

这是我的服务: @Stateless @TransactionAttribute(TransactionAttributeType.REQUIRED) @TransactionManagement(TransactionManagementType.CONTAINER)

谢谢!

1 个答案:

答案 0 :(得分:0)

乐观锁定的工作方式如下:您的实体中有一个版本字段(注释为@Version)。您加载此实体,并且(例如),版本字段具有值33.然后,您保存实体。 Hibernate检查实体(33)中的版本值是否与表中的版本值匹配。如果没有,它会抛出此异常。如果它们匹配,则会增加实体和数据库中的版本。

因此,如果再次保存实体,但仍然从表单中获取仍包含旧版本值(33)的值,则会出现此异常。确保使用实体的最新值刷新表单对象,包括版本字段。

在没有任何代码的情况下提供更多细节是不可能的,但这应该使您能够调试并查看错误的位置。