在删除中捕获 (DataIntegrityViolationException) 错误后更改域的 属性。圣杯 2.5
Change domain's property after catch(DataIntegrityViolationException) error in delete. Grails 2.5
我正在尝试修改域 属性 后发现删除错误。我的动作代码如下:
@Transactional
def delete(User userInstance) {
if (userInstance == null) {
notFound()
return
}
try {
userInstance.delete(flush: true)
}
catch(e) {
userInstance.active = false
userInstance.save(flush: true)
render status: 200
return
}
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.deleted.message', args: [message(code: 'user.label', default: '${className}'), userInstance.id])
redirect action:"index", method:"GET"
}
'*'{ render status: NO_CONTENT }
}
}
我想把active的属性值改成false,以防删除时出错
你得到 DataIntegrityViolationException
因为你违反了一些外键关系规则,在你的情况下很可能你的 user
实例被其他域对象引用(table).
你可以在 catch 块上做任何你想做的事情 userInstance.active = false
很好,但你不会因此而收到错误(再次从 catch 块引发另一个错误)。
我正在尝试修改域 属性 后发现删除错误。我的动作代码如下:
@Transactional
def delete(User userInstance) {
if (userInstance == null) {
notFound()
return
}
try {
userInstance.delete(flush: true)
}
catch(e) {
userInstance.active = false
userInstance.save(flush: true)
render status: 200
return
}
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.deleted.message', args: [message(code: 'user.label', default: '${className}'), userInstance.id])
redirect action:"index", method:"GET"
}
'*'{ render status: NO_CONTENT }
}
}
我想把active的属性值改成false,以防删除时出错
你得到 DataIntegrityViolationException
因为你违反了一些外键关系规则,在你的情况下很可能你的 user
实例被其他域对象引用(table).
你可以在 catch 块上做任何你想做的事情 userInstance.active = false
很好,但你不会因此而收到错误(再次从 catch 块引发另一个错误)。