Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails 要在同一操作中删除和插入吗_Grails_Groovy_Gorm - Fatal编程技术网

Grails 要在同一操作中删除和插入吗

Grails 要在同一操作中删除和插入吗,grails,groovy,gorm,Grails,Groovy,Gorm,我的控制器中有一个操作,可以上传带有数字列表的csv文件。 现在的过程是,首先我需要在一定条件下从表中删除现有数据,然后插入新数据。 我的代码片段如下所示 控制器: @Transactional def uploadFile() { if(!params?.updateExisting){ println "Going to call service to delete records" myService.deleteN

我的控制器中有一个操作,可以上传带有数字列表的csv文件。 现在的过程是,首先我需要在一定条件下从表中删除现有数据,然后插入新数据。 我的代码片段如下所示

控制器:

@Transactional
    def uploadFile() {

        if(!params?.updateExisting){
            println "Going to call service to delete records"
            myService.deleteNumbers()

            def newList = Number.findAllByDeleted(false)
            println "NEW LS:"+newList
            //HERE I'm GETTING BLANK
        }

        def file = request.getFile("fileCsv")

        file.inputStream
        .splitEachLine(',') { fields ->
            Number.withNewTransaction {

                        def number = fields[0]?.toString().replaceAll(" ","").replaceAll("-","")
                        Number numberInstance = new Number()

                        def numberExist = Number.findAllByNumberAndDeleted(number, false)
                        //HERE NUMBER IS STILL EXIST 
                        if(!numberExist){
                            numberInstance.number = number
                            numberInstance.save(flush:true)
                            count++
                        }else{
                            println "Number exist: "+number
                        }
            }
        }
        redirect(uri:'/number/list')
    }
我的服务:

@Transactional
    def deleteNumbers(){
        Number.findAll().each {
            it.deleted = true
            it.save(flush: true)
        }
    }
调用服务方法
deleteNumbers
后,我得到一个空白列表
新的LS:[]
,但是
def numberExist=Number.findAllByNumberAndDeleted(Number,false)
返回一个数字,表示已经存在


谢谢。

尝试用新的事务关闭删除Number.with。您的代码应该可以工作。

在删除中,您的服务中的数字应该
number.findAll…
be
number.findAll
?可以从将所有业务逻辑移动到事务性服务方法开始&只需在删除事务性注释后使用控制器指向它,我怀疑您在处理csv时是否需要使用NewTransaction。您可以在您的服务中使用单个
executeUpdate()
,看起来您在以前运行的
eachLine()
方法中插入了多少个实例