2016-06-11 13 views
0

Ich kann einen Objekteigenschaftswert nach dem Ausnahmefehler Catch ändern? Ich tue dies in meiner Löschaktion:Ändern Objektwert nach Fremdschlüssel Ausnahme in 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 } 
     } 
    } 

aber ich erhalte diesen Fehler:

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


Ich habe versucht, diesen Service mit einem Verfahren zu tun, um die Ausnahme zu behandeln:

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

und auf fangen:

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

aber ich bekomme immer den gleichen Fehler.

Antwort

0

Versuchen Sie, try/catch block zum Controller zu verschieben und eine neue Methode im Service zu erstellen, die Ihre Exception behandelt, falls sie auftritt.

+0

Ich habe einen neuen Dienst erstellt, aber immer den gleichen Fehler erhalten. Sie können das Beispiel veranschaulichen? – Matheus

+0

Haben Sie den Controller wie gesagt benutzt? –

+0

meinst du, mache so etwas wie: [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)? Die Aktion delete befindet sich im TaskController. – Matheus

Verwandte Themen