在进行grails开发中出现了一个郁闷的问题,代码如下
结果出现了下面错误
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)
哪位达人能解释一下为什么出现乐观锁异常么?
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)
哪位达人能解释一下为什么出现乐观锁异常么?