当前位置: 首页 > 面试题库 >

如何使用JPA和Hibernate修复StaleObjectStateException

龙星辰
2023-03-14
问题内容

控制器逻辑:

def updateObject() {

    Object o = Object.get(params.id as Long)

    o.otherObjects.clear()

    objectDataService.saveObject(o.id)

    OtherObject newObject = new OtherObject;

    o.addToOtherObjects(newObject)

    objectDataService.saveObject(o.id)

}

服务逻辑

def saveObject(long profileId) {
    o.save(flush:true)
}

怎么了

在90%的情况下,这将正常工作。

问题

ERROR errors.GrailsExceptionResolver  - StaleObjectStateException occurred when processing request: [GET] /controller/updateObject - parameters:
stuff[]: data
Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [com.path.Object#1]. 
Stacktrace follows:
Message: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [com.path.Object#1]

我已经阅读了相关问题,并找到了merge上面看到的电话。它解决了大约50%的案件,但不是全部。


问题答案:

对于我们来说,一些不同的方法最终解决了StaleObjectException定期发生的问题:

object = object.refresh()

检索对象后刷新对象解决了我们的大多数StaleObjectExceptions。尤其是在某人可能会从其他地方处理同一对象并更改其某些成员的情况下(大多数问题来自集合成员)。

总体项目稳定性:

wrongly linked resources

我们在实际上不需要的特定资源文件上有一个404,因此在一段时间内忽略了它。原来,丢失的文件将导致会话保持打开状态-从而左右构造了StaleObjects。

因此,作为向 比平常多的 人的提示(某些StaleObject可能经常发生-请参见上面的答案)StaleObjectExceptions:确保
所有 资源都正确链接,并且您的开发人员工具(Chrome F12)不会报告任何丢失的文件。



 类似资料:
  • 问题内容: 我想以一种可为我的系统恢复的方式重命名PostgreSQL(9.6)表(使用JPA / Hibernate的Java应用程序) 在我的Java代码中,JPA实体将具有以下注释 ,数据库将具有名为的等效表。 我想将表重命名为,以便可以逐步更新数据库和Java应用程序,从而允许失败和回滚。 典型的步骤是 创建in的副本 确保两种读/写都可用(即,两种方式都复制了数据) 更新Java应用程序

  • 问题内容: DISTINCT在JPA中使用哪一列,并且可以更改它? 这是使用DISTINCT的示例JPA查询: 哪一个没有多大意义-区别基于哪个列?是否在Entity上将其指定为注释,因为我找不到注释? 我想指定要区分的列,例如: 我正在使用MySQL和Hibernate。 问题答案: 更新:请参阅投票最多的答案。 我自己的已经过时了。 仅出于历史原因保留在这里。 在Joins中通常需要在HQL中

  • 问题内容: 有人知道如何避免以下代码的下一个警告吗? 问题答案: 如消息所示,请改用命名参数。

  • 我为这个特殊的问题找了很多,但我没有找到任何具体的解决办法。我在一个表中有一个复合主键,这个复合主键的一个字段是另一个表的复合主键的一部分。您可以说这个特定的字段是第二个表中的外键,但是在表定义中没有定义任何独占外键约束。对于第一个表中的每个rec,第二个表中可能有多条记录。我试图使用SPringBoot-JPA-Hibernate实现这一点,但无法实现。有人能帮我吗。以下是德泰:- 我有一个US

  • 我试图更好地理解JPA/Hibernate和SQL服务器的注释。 我创建了一个简单的项目:一个名为“Articles”的抽象类。有两个类继承了它:Ramette添加了权重,Pen添加了颜色。下面的代码无效,我无法更正错误。你有什么想法吗?非常感谢。

  • 问题内容: 我有以下类别描述代码段: 该代码在Hibernate 4上不起作用,因为不支持 我从 Joda-Time 看到了有关如何使用 LocalDateTime 的建议,但我使用的是Java 8。 __ 问题答案: 由于Hibernate 4不支持它,因此您需要实现一个如本示例所示的用户类型。 然后,可以在带有@Type批注的映射中使用新的用户类型。例如 @Type批注需要一个实现userTy