在进行grails开发中出现了一个郁闷的问题,代码如下
AController(){
def aService
def insertSome(){
aService.insert()
}
}
AService(){
def insert(){
for(po in poListFromRequest){
po.save()
}
for(po2 in po2ListFromRequest){
po2.save()
}
}
}
class Po1Job{
//定时的变量设置
def timeout = 10000l
//delete 操作
def delFuntion(){
def poList = Po.list()
//将 po 表中的数据全部转移到 polog 表中
for(po in poList){ //假设po表中无重复数据
def polog = new PoLog()
polog.properties= po.properties
polog.save()
com.mysite.EmailUtil.send(); //发送email
po.delete()
}
}
}
//同 Po1Job
class Po2Job{
//定时的变量设置
def timeout = 10000l
//delete 操作
def delFuntion(){
def po2List = Po2.list()
//将po2 表中的数据全部转移到 po2log 表中
for(po2 in po2List){
def po2log = new Po2Log()
po2log.properties= po2.properties
po2log.save()
com.mysite.EmailUtil.send(); //发送email
po2.delete();
}
}
}
结果出现了下面错误
org.quartz.SchedulerException: JobListener 'sessionBinderListener' threw exceptiwas incorrect): [po#14] [See nested exception: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction
org.hibernate.StaleObjectStateException: Row was updated or deleted by another t
ransaction (or unsaved-value mapping was incorrect): [po#14]
at org.hibernate.persister.entity.AbstractEntityPersister.check(Abstract
EntityPersister.java:1765)
at org.hibernate.persister.entity.AbstractEntityPersister.delete(Abstrac
tEntityPersister.java:2523)
at org.hibernate.persister.entity.AbstractEntityPersister.delete(Abstrac
tEntityPersister.java:2697)
at org.hibernate.action.EntityDeleteAction.execute(EntityDeleteAction.ja
va:74)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:146)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutio
ns(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlus
hEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.codehaus.groovy.grails.plugins.quartz.listeners.SessionBinderJobL
istener.jobWasExecuted(SessionBinderJobListener.java:55)
at org.quartz.core.QuartzScheduler.notifyJobListenersWasExecuted(QuartzS
cheduler.java:1659)
at org.quartz.core.JobRunShell.notifyJobListenersComplete(JobRunShell.ja
va:352)
at org.quartz.core.JobRunShell.run(JobRunShell.java:227)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.j
ava:520)
哪位达人能解释一下为什么出现乐观锁异常么?
分享到:
相关推荐
GORM中的高级特性包括自定义映射选项、事务编程以及乐观锁和悲观锁等并发控制机制。 在Web层的开发中,Grails提供了灵活的控制器来处理请求和响应。它还包含了Groovy Server Pages(GSP),这是一种基于Groovy的...
- Grails版本信息可以在项目的`BuildConfig.groovy`文件中找到。 **文档引擎** - 提供了文档生成工具,帮助开发者快速生成API文档。 **依赖解析** - Grails使用Ivy作为其依赖管理系统。 - 支持配置依赖关系,包括...
在Grails中,所有应用程序组件都动态地获得了`log`属性,包括领域模型、控制器和标签库,方便进行日志记录。DataSource配置决定了数据库的创建和管理,例如`create-drop`模式会在运行时删除并重建数据库,`create`...
在Hibernate中,实现乐观锁的一种常见方式是通过版本字段(version field)来追踪数据的版本。当数据被读取时,版本字段会被一同获取;在更新时,Hibernate会将当前版本与数据库中的最新版本进行比较。如果两个版本...
通过GORM,开发者可以将数据库表映射到Grails中的域类,从而实现数据的增删改查操作。 - **GSQL**: 这里可能是指Grails框架支持的查询语言,但实际上Grails主要使用的是HQL(Hibernate Query Language),因此这里的...
12.2 在Grails中使用Spring 158 12.3 本章小结 160 第13章 深入Controller 161 13.1 Controller中常用的属性与方法 161 13.2 自定义URL Mapping 164 13.3 Web Flow 167 13.4 本章小结 172 第14章 深入Groovy ...
在集成 Ehcache 时需要注意项目中其他库之间的兼容性问题,避免版本冲突导致的问题。 #### 四、缓存概念(Cache Concepts) 1. **缓存管理器(CacheManager)**:负责管理一个或多个缓存实例。 2. **缓存(Cache)...
5. "铁轨锁":同样可能是项目中的术语,可能指的是确保数据安全、防止并发冲突的机制。 6. "grails -Dgrails.env=name war Skillo.war":这是一个Grails框架的命令,用于构建War文件。Grails是一个基于Groovy语言的...
Java的并发特性在处理大规模并行计算时特别有用,如Java SE 5中的锁、原子量、并行容器和线程调度。此外,Java还可以与Groovy、JDO等技术结合,用于开发云服务。 【Java在教育中的应用】 在教育领域,云计算可以...