2017-06-23 49 views
0

我在我的控制器中有一個操作,用數字列表上傳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') 
    } 

爲myService:

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

呼叫服務方法deleteNumbers後,我越來越空白列表NEW LS:[],但隨後def numberExist = Number.findAllByNumberAndDeleted(number, false)返回我數字意味着已經存在。

謝謝..

+0

在您的服務deleteNumbers應該'number.findAll ...'是'Number.findAll'? –

+0

也許首先將所有業務邏輯轉移到Transactional服務方法中,並在刪除Transactional註釋後僅使用控制器指向它,但我懷疑在處理csv時需要使用NewTransaction –

+0

您可能使用單個'你的服務中的executeUpdate()' – injecteer

回答

1

嘗試刪除Number.withNewTransaction閉包。你的代碼應該工作..

+0

它只是工作..謝謝哈利:) –