Grails

时间:2016-06-11 19:39:50

标签: grails

我可以在异常错误捕获后更改对象属性值吗?我在删除操作中执行此操作:

@Transactional
    def delete(Task task) {

        if (task == null) {
            transactionStatus.setRollbackOnly()
            notFound()
            return
        }
        try{
            task.delete flush:true
        }catch (DataIntegrityViolationException e){
            Task.withNewSession{
                def taskError = Task.get(task.id)
                taskError.deleted = true
                taskError.save()
            }
        }

        request.withFormat {
            form multipartForm {
                flash.message = message(code: 'default.deleted.message', args: [message(code: 'task.label', default: 'Task'), task.id])
                redirect action:"index", method:"GET"
            }
            '*'{ render status: NO_CONTENT }
        }
    }

但是我收到了这个错误:

  

'错误:当前事务被中止,命令被忽略直到结束   交易块。'

我尝试使用一种方法来处理异常:

@Transactional
class UtilService {
    def delete(Object domain) {
        if(domain?.properties?.containsKey('deleted')){
            domain.deleted = false
            domain.save(flush: true)
        }
    }
}

和赶上:

 @Transactional
        def delete(Task task) {
            ...
            try{
                task.delete flush:true
            }catch (DataIntegrityViolationException e){
                utilService.delete(task)
            }
            ...
        }

但我仍然遇到同样的错误。

1 个答案:

答案 0 :(得分:0)

尝试将try / catch块移动到控制器并在服务中创建一个新方法,以便在发生异常时处理它。