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