Grails 要在同一操作中删除和插入吗
我的控制器中有一个操作,可以上传带有数字列表的csv文件。 现在的过程是,首先我需要在一定条件下从表中删除现有数据,然后插入新数据。 我的代码片段如下所示 控制器:Grails 要在同一操作中删除和插入吗,grails,groovy,gorm,Grails,Groovy,Gorm,我的控制器中有一个操作,可以上传带有数字列表的csv文件。 现在的过程是,首先我需要在一定条件下从表中删除现有数据,然后插入新数据。 我的代码片段如下所示 控制器: @Transactional def uploadFile() { if(!params?.updateExisting){ println "Going to call service to delete records" myService.deleteN
@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…
benumber.findAll
?可以从将所有业务逻辑移动到事务性服务方法开始&只需在删除事务性注释后使用控制器指向它,我怀疑您在处理csv时是否需要使用NewTransaction。您可以在您的服务中使用单个executeUpdate()
,看起来您在以前运行的eachLine()
方法中插入了多少个实例