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)
返回我數字意味着已經存在。
謝謝..
在您的服務deleteNumbers應該'number.findAll ...'是'Number.findAll'? –
也許首先將所有業務邏輯轉移到Transactional服務方法中,並在刪除Transactional註釋後僅使用控制器指向它,但我懷疑在處理csv時需要使用NewTransaction –
您可能使用單個'你的服務中的executeUpdate()' – injecteer