gpt4 book ai didi

java - Grails:events.PatchedDefaultFlushEventListener - 无法将数据库状态与 session org.hibernate.StaleObjectStateException 同步

转载 作者:行者123 更新时间:2023-11-29 05:19:18 26 4
gpt4 key购买 nike

我的应用程序出现以下错误。

ERROR events.PatchedDefaultFlushEventListener  - Could not synchronize database state with session
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [buddyis.User#848df2e62fcf93e1b3]
at buddyis.SessionResource$_login_closure1.doCall(SessionResource.groovy:104)
at org.grails.datastore.gorm.GormStaticApi.withTransaction(GormStaticApi.groovy:814)
at org.grails.datastore.gorm.GormStaticApi.withTransaction(GormStaticApi.groovy:714)
at buddyis.SessionResource.login(SessionResource.groovy:41)
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1511)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1442)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
at org.grails.jaxrs.web.JaxrsContext$JaxrsServiceImpl.process(JaxrsContext.java:193)
at org.grails.jaxrs.JaxrsController.handle(JaxrsController.groovy:45)
at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:198)
at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
at org.grails.jaxrs.web.JaxrsFilter.doFilterInternal(JaxrsFilter.java:46)
at com.github.greengerong.PreRenderSEOFilter.doFilter(PreRenderSEOFilter.java:65)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

这个错误是什么意思,我该如何预防?

最佳答案

这个异常是由以下原因引起的

  • Ann 读了一行
  • Bob 读同一行
  • Bob 更新行
  • Ann 尝试更新该行,但尝试失败,因为 Hibernate 注意到它在 Ann 读取后已更新

很难建议您如何处理这个问题,因为您没有提供任何上下文信息,例如谁或什么正在阅读/更新该行。以下是一些一般性建议:

如果您不关心这种情况,并且希望 Ann 能够更新该行,即使它在她阅读后(由 Bob)更新了,只需通过将以下内容添加到相关的来禁用乐观锁定领域类

static mapping = {
version false
}

或者,您可以在 Controller 中检查该行自 Ann 读取后是否已更新,如果是,则向她显示更新后的行,以便她可以将更新重新应用到最新数据。可以通过存储版本号来执行 Controller 中的检查。 (安读)在一个隐藏的表单字段中。当提交 Ann 的更新(隐藏版本号)时,从数据库加载对象并检查提交的版本号。等于版本号从数据库加载的对象。如果数字不同,则显示该行的最新版本以及一条消息,告知她发生了什么。

当然,上述建议仅适用于用户提交表单更新行的情况。但正如我所说,您的问题不包含任何上下文,而且我的 Crystal 球电量不足。

关于java - Grails:events.PatchedDefaultFlushEventListener - 无法将数据库状态与 session org.hibernate.StaleObjectStateException 同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25428852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com