如何使用validate()grails方法而不保存?

时间:2011-06-06 15:57:32

标签: grails persistence validation

我有一个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 个答案:

答案 0 :(得分:4)

在任何实例上调用discard()时,如果检测到已更改/变脏,则不希望自动保留:

if (e1.validate() && ne1.validate()){
   ...
}
else {
   e1.discard()
   ne1.discard()
}

答案 1 :(得分:0)

我找到了一个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