我的应用中出现以下错误。
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)
这个错误意味着什么,我该如何预防呢?
答案 0 :(得分:3)
此异常由以下
引起很难告诉您该怎么做,因为您还没有提供任何背景信息,例如:阅读/更新行的人或者是什么。以下是一些一般性建议:
如果您不关心这种情况,并希望Ann能够更新该行,即使它已经更新(Bob),因为她阅读了它,只需通过添加以下内容来禁用乐观锁定相关的域类
static mapping = {
version false
}
或者,您可以检查控制器是否自Ann读取后该行是否已更新,如果是,请向她显示更新的行,以便她可以将更新重新应用于最新数据。可以通过存储版本号来执行控制器中的检查。 (安读)在隐藏的表格字段中。提交Ann的更新时(隐藏版本号),从数据库加载对象并检查提交的版本号是否为。等于版本号。从数据库加载的对象。如果数字不同,请显示该行的最新版本以及通知她发生了什么的消息。
当然,上述建议仅适用于提交表单的用户正在更新行的情况。但正如我所说,你的问题并不包括任何背景,我的水晶球电池电量不足。