2016-06-11 4 views
0

Я могу изменить значение свойства объекта после исключения ошибки исключения? Я делаю это в моем удалении действия:Изменение значения объекта после исключения внешнего ключа в 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 } 
     } 
    } 

, но я получаю эту ошибку:

'ERROR: current transaction is aborted, commands ignored until end of transaction block.'


Я попытался сделать эту услугу с помощью метода для обработки исключения:

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

но я продолжаю получать ту же ошибку.

ответ

0

Попробуйте переместить блок try/catch в контроллер и создать новый метод в службе, который будет обрабатывать ваше исключение, если это произойдет.

+0

Я создал новую услугу, но продолжаю получать ту же ошибку. Вы можете продемонстрировать, как это сделать? – Matheus

+0

Вы использовали контроллер, как я уже говорил? –

+0

Вы имели в виду сделать что-то вроде этого: [http://mrhaki.blogspot.com.br/2014/05/grails-goodness-exception-methods-in.html](http://mrhaki.blogspot.com.br /2014/05/grails-goodness-exception-methods-in.html)? Действие delete находится внутри TaskController .. – Matheus

Смежные вопросы