Grails在hibernate会话中搜索

时间:2013-06-19 20:58:03

标签: hibernate grails gorm

使用不带save()的{​​{1}}时,实例位于休眠会话中,而不是数据库中。那么无论如何我们可以在会话中搜索实例吗?

更新: 我有一个对象队列,并使用它们来创建或更新另一个对象编号:

flush: true

所以问题是我必须在队列中的每个对象的delete或save方法中设置flush:true。 否则,如果创建了对象num但未刷新到数据库,则num上的更新可能无法在数据库中找到它并创建一个新的(这是重复的)。

但每次冲洗都是非常低效的。我正在考虑不设置flush:true并在hibernate会话中搜索以进行更新。这可能吗?有什么建议?解决?

我做了一个测试。创建一个新的Number对象num,保存它而不刷新,然后立即搜索它:

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)

temp为NULL。显然,find / findByA是在数据库中搜索。

1 个答案:

答案 0 :(得分: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
}

Grails 2.2.2