我有一个域类,我需要在updateBofore
方法上更新同一域的其他实例的某些值。但它将无限运行。有没有办法只更新一次?
Class ABC {
String name
String ref
def beforeUpdate() {
List abcs = findAllWhere(ref: ref)
abcs.each {
it.name = name
it.save(flush: true)
}
}
}
答案 0 :(得分:0)
使用before insert gorm事件而不迭代所有列表并调用save。
class ABC {
//your defs here
def beforeInsert()
List abcs = findAllWhere(ref: ref)
if(abcs){
this.name = abcs.first().name
}
}
}
您必须在域类之外调用保存
ABC a = new ABC()
a.save()
并且beforeInsert制作技巧
答案 1 :(得分:0)
您需要修改beforeUpdate
方法,例如:
def beforeUpdate() {
def currentInstance = this
ABC.withNewSession {
List abcs = ABC.withCriteria {
eq("ref", currentInstance.ref)
// Make sure we don't again update the same current instance
ne("id", currentInstance.id)
}
abcs.each {
it.name = currentInstance.name
it.save(flush: true)
}
}
}
beforeUpdate
方法改变了两件事:
withNewSession
以便新的save()
操作不应该尝试刷新当前的hibernate会话(这将导致无限循环)ne()
条件排除当前实例的更新,因为您已经在更新当前实例。