Vivek Buddhadev
Vivek Buddhadev

Reputation: 397

Want to Delete and Insert in same Action

I have one action in my controller that upload csv file with list of numbers. Now the process is first I need to delete existing data from the table on certain condition then insert fresh data. My snippet code is as follows..

Controller:

@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')
    }

myService:

@Transactional
    def deleteNumbers(){
        Number.findAll().each {
            it.deleted = true
            it.save(flush: true)
        }
    }

After calling service method deleteNumbers I'm getting blank list NEW LS:[], But then def numberExist = Number.findAllByNumberAndDeleted(number, false) returns me a number means already exist.

Thanks..

Upvotes: 0

Views: 192

Answers (1)

harry verma
harry verma

Reputation: 26

Try removing Number.withNewTransaction closure. Your code should work..

Upvotes: 1

Related Questions