使用save()
withoutflush: true
时,实例在休眠会话中,而不是在数据库中。那么无论如何我们可以在会话中搜索实例吗?
更新:我有一个对象队列并使用它们来创建或更新另一个对象编号:
def inst = getNextOneFromQueue()
Number num = Number.findWhere(a:inst.a, b:ins.b)
If (num == null){
num = new Number()
}
num.a = inst.a
num.b = inst.b
num.save()
ins.delete(flush:true)
所以问题是我必须在队列中的每个对象的删除或保存方法中设置flush:true。否则,如果对象 num 已创建但未刷新到数据库,则 num 的更新可能无法在数据库中找到它并创建一个新对象(这是重复的)。
但是每次冲洗真的是低效的。我正在考虑不设置 flush:true 并在休眠会话中搜索以进行更新。这可能吗?有什么建议么?解决问题?
我做了一个测试。创建一个新的 Number 对象 num,不刷新保存,然后立即搜索:
Number num = new Number()
num.a = 234
num.save()
def temp = Number.findWhere(a:234) //Number.findByA(234)
温度为 NULL。显然 findWhere/findByA 是在数据库中搜索。