0

我收到以下异常:

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

当我尝试再次使用表单更新对象时会发生这种情况。所以第一次它运行良好,但是当我再次尝试更新同一个对象时,我得到了那个异常。

它可以在会话中刷新吗?

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

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

谢谢!

4

1 回答 1

0

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

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

没有任何代码就不可能提供更多细节,但这应该使您能够调试并查看错误在哪里。

于 2013-08-23T15:36:12.527 回答