- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Controller 逻辑:
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% 的案例,但不是全部。
最佳答案
StaleObjectStateException:
As already commented out about this exception. When an invalid version-ed domain object is in the session during a flush (explicit or implicit) the version number is bumped but it is not persisted to the database. Then, when it becomes valid again and saved and flushed, hibernate considers it stale, since the version number does not match the version in the database and it throws a StaleObjectStateException.
这可以这样解决。
- you have to find out version value before doing the update , if it's 1 then you have to update by using program. at particular operation of update .
- By using @version annotation.
关于@版本:
The version number mechanism for optimistic locking is provided through a @Version annotation. Example: The @Version annotation
@Entity
public class Flight implements Serializable {
...
@Version
@Column(name="OPTLOCK")
public Integer getVersion() { ... }
}
这里,版本属性映射到 OPTLOCK 列,实体管理器使用它来检测冲突的更新,并防止丢失被最后提交获胜策略覆盖的更新 @version
有关 Grails 的更多详细信息,请参阅下面的链接,它有 Git hub 代码。
test for GRAILS-8937: HibernateOptimisticLockingFailureException
关于hibernate - 如何使用 JPA 和 Hibernate 修复 StaleObjectStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25531053/
我最近在尝试将子对象添加到父对象的列表时遇到了一些并发修改错误。 根据我所读到的内容,添加子对象会增加父对象的版本号,因此如果另一个线程正在执行我的创建方法,它会提示。 很公平。 我返回并尝试锁定域对
我在 Java J2EE Web 应用程序中使用 Hibernate 3.5.2 和 Spring Core 3.0.1。当不同的用户同时更新同一记录时,我收到 StaleObjectStateExc
在我的 Spring Boot Web 应用程序中,我有一个 Controller ,它提供了一种从数据库中删除实体的方法,该方法又调用 DAO 类。但是,当我调用 entityManager.rem
我已经为 StaleObjectStateException 苦苦挣扎了一个多星期,并决定在这里发布一个重现该问题的简单应用。 我了解 org.hibernate.StaleObjectStateEx
我们将 Hibernate 3.6.0.Final 与 JPA 2 和 Spring 3.0.5 结合使用,用于在 tomcat 7 和 MySQL 5.5 上运行的大型企业应用程序。应用程序中的大多
我应该在 ASP.NET MVC 应用程序的相应 Controller 中使用 try-catch block (旨在捕获/处理 StaleObjectStateException)包装对存储库的调用
有人可以指出错误吗? 注意:这是从我的真实应用程序中提取的简化测试用例。因此 3 个实体管理器的奇怪用法和em1.getTransaction().begin();em1.clear();em1.cl
当我尝试提交我的 session 时,另一个用户也更改了同一个对象,然后 Hibernate 抛出一个 StaleObjectStateException . 当我尝试从该异常中恢复时,我调用: se
我们将 Hibernate 3.6.3.Final 和 MySQL 5.5.8 用于 Web 应用程序。后端在 JBoss 6.0.0 Final 服务器上运行。大多数时候一切都很好,但偶尔我们会收到
我在使用 hibernate 的基于 Spring 框架的 Web 应用程序的 Controller 中遇到此异常。我尝试了很多方法来解决这个问题,但无法解决。 在 Controller 的方法 ha
我们试图在抛出 StaleObjectStateException 后合并对象以保存合并的副本。 这是我们的环境状况: 列表项 多用户系统 WPF 桌面应用程序、SQL Server 2008 数据库
当我的应用程序中出现乐观并发问题时,我的应用程序中会抛出 StaleObjectStateException 而不是 OptimisticLockException (正如我所读到的,我应该期待这个)
-更新: 事实证明,我们根本无法更新任何域对象。我们创建了非常简单的域/服务/ Controller 组合,但仍然出现StaleObjectStateException:行已由另一个事务更新或删除(或
当我尝试创建四个客户时,有代码。1.将Customer1,2写入数据库2. 合并Customer3(具有相同的id,例如1)3.合并Customer4(再次具有相同的id)我想创建同一实体的任何版本
我有一种情况,一个线程可以从数据库检索一个对象,并编辑它,当刷新它时,我得到一个 StaleObjectStateException 因为与此同时另一个线程编辑了同一个对象(我正在使用乐观锁定)。我可
在我的代码中,我通过 Hibernate 从数据库获取一个对象,更改一个字段并提交更改 session = HibernateUtil.beginTransaction(); Song
在哪里可以找到有关在基于版本的乐观锁定保存操作中捕获哪些异常的信息。 “互联网”上的文本表明 Hibernate 自己的或 JPA 的 OptimisticLockingException 中的任何一
我正在尝试将数据从一个数据库复制到另一个数据库。一切正常,直到源数据库中的一行被修改(下面的堆栈跟踪)。向目标数据库添加新行按预期工作。 我有一个包含以下 bean 的每个数据库连接(mysql 和
我有一个 Spring Controller 方法的问题。它实际上对同一实体进行了两次更新,这会导致 StaleObjectStateException 。 问题是,当我检索 Member 实例时,我
我有以下代码 studentInstance.addToAttempts(studentQuizInstance) studentInstance.merge() studentInstance.sa
我是一名优秀的程序员,十分优秀!