grails - 删除中的catch(DataIntegrityViolationException)错误后,更改域的属性。 Cereal 2.5

标签 grails

在删除中遇到错误后,我试图修改域属性。我的 Action 代码如下:

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

删除时发生错误时,我想将 Activity 属性值更改为false。

最佳答案

之所以得到DataIntegrityViolationException,是因为您违反了一些外键关系规则,在您的情况下,很可能您的user实例被其他某个域对象(表)引用。

userInstance.active = false很好的情况下,您可以在catch块上执行任何操作,但是由于这个原因您没有收到错误(再次从catch块引发另一个错误)。

关于grails - 删除中的catch(DataIntegrityViolationException)错误后,更改域的属性。 Cereal 2.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29524126/

相关文章:

security - 关于安全性/可见性的基本Groovy查询

grails - 找不到TestDataConfig.groovy,构建测试数据插件无需配置文件即可继续进行

grails - [ chalice 3] : Replacement of doWithWebDescriptor on Plugin descriptor?

file - Grails在部署war时无法找到pdf资源

grails - 如何清除和替换 Grails/Groovy 中一对多关系中的集合

java - Grails 编码参数发布请求

java - Grails:无法从 wsdl2java 导入类

Grails 和数据源的使用

grailsApplication Autowiring 到 spock 测试始终为 null

grails - 建议使用Grails插件,使Grails成为不错的CMS选项