2016-06-11 5 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)? アクションの削除はTaskController内にあります。 – Matheus

関連する問題