我有一个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()
}
}
我的问题是我不想在两次验证成功之前保存对象。
答案 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