Как использовать метод validate () grails без сохранения? - PullRequest
0 голосов
/ 06 июня 2011

У меня проблема с методом validate () grails, когда я использую entity.validate (), объект-сущность сохраняется в базе данных, но мне требуется проверить несколько объектов перед сохранением данных.

def myAction = {
  def e1 = new Entity(params)
  def ne1 = new EntityTwo(params)

  // Here is the problem
  // If e1 is valid and ne1 is invalid, the e1 object is persisted on the DataBase
  // then I need that none object has saved, but it ocurred. Only if both are success 
  // the transaction should be tried
  if(e1.validate() && ne1.validate()){
    e1.save()
    ne1.save()
    def entCombine = new EntityCombined()
    entCombine.entity = e1
    entCombine.entityTwo = ne1
    entCombine.save()
  }
}

Моя проблема в том, что я не хочу, чтобы объекты сохранялись до того, как обе проверки пройдут успешно.

Ответы [ 2 ]

4 голосов
/ 06 июня 2011

Вызовите discard () для любого экземпляра, который не хочет автоматически сохраняться, когда он определяется как измененный / грязный:

if (e1.validate() && ne1.validate()){
   ...
}
else {
   e1.discard()
   ne1.discard()
}
0 голосов
/ 07 июня 2011

Я нашел решение с помощью метода withTransaction (), потому что метод discard () применяется только к обновлениям.

def e1 = new Entity(params)
def ne1 = new EntityTwo(params)

Entity.withTransaction { status ->  
  if(e1.validate() && ne1.validate()){
    e1.save()
    ne1.save()
    def entCombine = new EntityCombined()
    entCombine.entity = e1
    entCombine.entityTwo = ne1
    entCombine.save()
  }else{
    status.setRollbackOnly()
  }
}

Таким образом, транзакция завершается только в случае успешной проверки, другим способом.транзакция откатывается.

Жду, что эта информация может помочь любым людям.С уважением ко всем!:) YPRA

...