`
savage100
  • 浏览: 2817 次
  • 来自: asfdsadf
社区版块
存档分类
最新评论

关于grails中锁的问题

阅读更多
在进行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)

哪位达人能解释一下为什么出现乐观锁异常么?
分享到:
评论
3 楼 agile_boy 2008-05-08  
使用withTransaction方法自己控制事务,看看呢
2 楼 blustc 2008-05-08  
我也顶 我开发中也出现了这个问题
1 楼 savage100 2008-05-08  
自己顶~~

相关推荐

    grails中文入门简介

    GORM中的高级特性包括自定义映射选项、事务编程以及乐观锁和悲观锁等并发控制机制。 在Web层的开发中,Grails提供了灵活的控制器来处理请求和响应。它还包含了Groovy Server Pages(GSP),这是一种基于Groovy的...

    grails 中文第二版

    - Grails版本信息可以在项目的`BuildConfig.groovy`文件中找到。 **文档引擎** - 提供了文档生成工具,帮助开发者快速生成API文档。 **依赖解析** - Grails使用Ivy作为其依赖管理系统。 - 支持配置依赖关系,包括...

    groovy and grails ppt

    在Grails中,所有应用程序组件都动态地获得了`log`属性,包括领域模型、控制器和标签库,方便进行日志记录。DataSource配置决定了数据库的创建和管理,例如`create-drop`模式会在运行时删除并重建数据库,`create`...

    Hibernate乐观锁

    在Hibernate中,实现乐观锁的一种常见方式是通过版本字段(version field)来追踪数据的版本。当数据被读取时,版本字段会被一同获取;在更新时,Hibernate会将当前版本与数据库中的最新版本进行比较。如果两个版本...

    Grails Persistence with GORM and GSQL

    通过GORM,开发者可以将数据库表映射到Grails中的域类,从而实现数据的增删改查操作。 - **GSQL**: 这里可能是指Grails框架支持的查询语言,但实际上Grails主要使用的是HQL(Hibernate Query Language),因此这里的...

    Grails 技术精解与Web开发实践【源码+样章】----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    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官方教程

    在集成 Ehcache 时需要注意项目中其他库之间的兼容性问题,避免版本冲突导致的问题。 #### 四、缓存概念(Cache Concepts) 1. **缓存管理器(CacheManager)**:负责管理一个或多个缓存实例。 2. **缓存(Cache)...

    skillo:Skillo - 旧仓库 - 移至 bitbucket

    5. "铁轨锁":同样可能是项目中的术语,可能指的是确保数据安全、防止并发冲突的机制。 6. "grails -Dgrails.env=name war Skillo.war":这是一个Grails框架的命令,用于构建War文件。Grails是一个基于Groovy语言的...

    Java与云计算2022优秀文档.ppt

    Java的并发特性在处理大规模并行计算时特别有用,如Java SE 5中的锁、原子量、并行容器和线程调度。此外,Java还可以与Groovy、JDO等技术结合,用于开发云服务。 【Java在教育中的应用】 在教育领域,云计算可以...

Global site tag (gtag.js) - Google Analytics