Pergunta

Eu tenho 2 domínios .. mestre e detalhes.

Master{
 String masterName; 
 static hasMany=[details:Detail]
}

Detail
{
  String detailName ; 
  static belongsTo =[master:Master];
}

Eu tenho forma que pega o save

def save = {
 .....
 def master = new Master(params);
 params.detailsName.eachWithIndex(dtName, index ->
   def detail = new Detail();
   detail.detailName = dtName; 
   ....
   master.addToDetails(detail);
 }
  .....
 master.save(flush:true);
}

quando liguei master.save (), se houver erros em detalhes, o mestre ainda guardar os dados. Eu quero saber como cancelar mestre se houver erros em detalhes e eu gostaria de saber como rastrear os erros em detalhes?

graças

Foi útil?

Solução

Uma transação é o que você precisa. Você poderia executar a salvo em um serviço. Em serviços com transação = true, todos os métodos são envolvidos em transações e haverá um rollback automático se houver exceção é lançada:

class MasterService {

    boolean transactional = true

    def save(...) { }
}

Ou você poderia usar o withTransaction fechamento em seu controlador para embrulhar o seu código em uma transação se você não quiser criar um serviço.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top