Как отловить ошибку в addToTag () [grails] - PullRequest
2 голосов
/ 12 июля 2009

У меня есть 2 домена .. мастер и детали.

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

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

У меня есть форма, которая обрабатывает сохранение

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);
}

когда я вызвал master.save (), если в деталях есть ошибки, мастер все еще сохраняет данные. Я хочу знать, как отменить мастер, если есть ошибки в деталях, и я хотел бы знать, как отслеживать ошибки в деталях?

спасибо

1 Ответ

3 голосов
/ 12 июля 2009

Транзакция - это то, что вам нужно. Вы можете выполнить сохранение в службе. В сервисах с транзакцией = true все методы заключены в транзакции, и при возникновении любого исключения произойдет автоматический откат:

class MasterService {

    boolean transactional = true

    def save(...) { }
}

Или вы можете использовать закрытие withTransaction в вашем контроллере, чтобы обернуть ваш код в транзакцию, если вы не хотите создавать службу.

...