我收到以下异常:
org.hibernate.StaleObjectStateException:行已被另一个事务更新或删除(或未保存的值映射不正确):[
当我尝试再次使用Form更新对象时,会发生这种情况。因此,它第一次运行良好,但当我尝试再次更新同一个对象时,我得到了那个例外。
会话中是否可以刷新?
这是我的实体
@PersistenceContext(unitName = "JPAService", type = PersistenceContextType.EXTENDED)
private EntityManager nasc;
这是我的服务:
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
@TransactionManagement(TransactionManagementType.CONTAINER)
谢谢!
答案 0 :(得分:0)
乐观锁定的工作方式如下:您的实体中有一个版本字段(注释为@Version
)。您加载此实体,并且(例如),版本字段具有值33.然后,您保存实体。 Hibernate检查实体(33)中的版本值是否与表中的版本值匹配。如果没有,它会抛出此异常。如果它们匹配,则会增加实体和数据库中的版本。
因此,如果再次保存实体,但仍然从表单中获取仍包含旧版本值(33)的值,则会出现此异常。确保使用实体的最新值刷新表单对象,包括版本字段。
在没有任何代码的情况下提供更多细节是不可能的,但这应该使您能够调试并查看错误的位置。