def check(){
println"start first"
Domain1 domain1=Domain1.get(1);
domain1.lock();
println "locking started"
sleep(20*60)
println "save first"
domain1.name="hari ram"
domain1.save();
println "save first completed"
}
def check2(){
try {
println"start second"
Domain1 domain1=Domain1.get(1);
println"save second"
domain1.name="hari ram -------------------++++++++"
domain1.save(flush:true,failOnError:true);
println "save second completed"
}
catch(Exception ex){
ex.each{
println "error ${ex}"
}
}
}我在上面代码中的日志是:
start first
locking started
start second
save second
save second completed
save first
save first completed数据库也会更新。为什么lock()不能工作?难道在lock()之后,其他实例就不能更新了吗?或者是别的什么?还是我错过了什么?
发布于 2017-08-25 00:22:44
您是否使用相同的会话调用check和check2?lock()方法选择要更新的行(在DB级别),但是如果您进入同一会话并尝试获取相同的对象,则应该从hibernate会话获取该对象,而不是转到数据库并等待释放行。
我不确定这是您的问题,但看起来您的代码是正确的(尽管在本例中,您最好使用Domain.lock(1)同时获取和锁定它,单独进行两个调用没有任何问题)。
https://stackoverflow.com/questions/45860128
复制相似问题