0

使用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 是在数据库中搜索。

4

1 回答 1

0

重试你的例子,设置failOnError: true看看是否有任何错误,而save()

或改用此示例来获取有效的 json 响应。

//Controller action
def index() {
    new Number(a: 10, b: 25).save()
    render Number.findWhere(a: 10) as JSON
}

//Number.groovy
class Number {
    Integer a
    Integer b
}

圣杯 2.2.2

于 2013-06-19T23:28:17.887 回答