con*_*ile 8 grails grails-orm grails-domain-class
当我将实例保存为:
test.save()
Run Code Online (Sandbox Code Playgroud)
保存可能会失败.我可以
if (!test.save(flush:true) {
// save failed
}
Run Code Online (Sandbox Code Playgroud)
考虑一下我从另一个函数获取实例并且无法执行此检查的情况,因为我不会再次保存实例.
有没有办法检查实例是否仍然存在于数据库中还是具有未保存状态?
小智 6
我知道这是一个老问题,但是为了以后参考,我认为适当的答案是这样的:
鉴于OP的原始问题
有没有办法检查实例是否仍保留在数据库中或处于未保存状态?
就在这里。调用实例的域类的exist()方法。
假设我们有一个Test域类和一个测试对象实例:
def bPersists = ( test.id != null && Test.exists(test.id) ); // Check test.id for null because a id of zero is a valid index, also the id might not be an integer.
Run Code Online (Sandbox Code Playgroud)
请注意检查test.id是否等于null,而不只是检查它的评估结果是否为true。那是因为一个等于零的id的取值为false,但实际上它是一个有效的id号。另外,id可以是字符串或其他数据类型。
原答案:
最终你想保存对象,所以如果它已经保存了
test.save(flush:true)
Run Code Online (Sandbox Code Playgroud)
将自动保存/更新对象。另外,hibernate 确保每个对象只有一个持久实例,如果有多个这样的实例,则在获取另一个对象时会出错。
编辑后的答案:
由于您不想保存对象,因此必须检查两件事:
以下代码应该可以做到这一点:
def exists = test.id?Test.get(test.id):false
def isPersisted = false
if(test.isAttached() || exists){
isPersisted = true
}
Run Code Online (Sandbox Code Playgroud)
我希望它能解决你的问题。