2013-05-16 2 views
0

В моем заявлении, в одной транзакции есть некоторые объекты предметной области, которые я хочу удалить, а некоторые обновления:Grails - сказать, если объект может быть удален

 Advertiser.withTransaction { 
     batch.each { record -> 
      if (recordsShouldBeDeleted(record)) 
       record.delete() 
      else 
       record.save() 
      } 
     } 

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

Есть ли способ узнать, прежде чем я попытаюсь удалить объект, если бы я мог это сделать, то я бы знал, что не пытаюсь удалить этот определенный объект, хотя мой recordsShouldBeDeleted возвращает true? (что-то вроде validate() метод, который проверяет ограничения?)

Или есть какие-либо другие идеи для ситуации?

Спасибо.

+0

Значит, это больше похоже на «recordCouldBeDeleted» (без поднятия каких-либо ограничений)? – lucke84

+0

Возможно, но что я могу проверить там? – Dvora

+0

Посмотрите на этот вопрос: [http://stackoverflow.com/questions/2294669/nhibernate-how-to-find-if-a-referenced-object-can-be-deleted] – lucke84

ответ

1

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

Advertiser.withTransaction { 
    batch.each { record -> 
     if (recordsShouldBeDeleted(record)) 
      try{ 
       record.delete() 
      } catch (Exception e) {} 
     else 
      record.save() 
     } 
    } 
Смежные вопросы