首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >grails 3+锁()中的悲观锁定

grails 3+锁()中的悲观锁定
EN

Stack Overflow用户
提问于 2017-08-24 19:12:11
回答 1查看 433关注 0票数 2
代码语言:javascript
复制
    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}"
            }
        }
    }

我在上面代码中的日志是:

代码语言:javascript
复制
start first
locking started
start second
save second
save second completed
save first
save first completed

数据库也会更新。为什么lock()不能工作?难道在lock()之后,其他实例就不能更新了吗?或者是别的什么?还是我错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-25 00:22:44

您是否使用相同的会话调用checkcheck2lock()方法选择要更新的行(在DB级别),但是如果您进入同一会话并尝试获取相同的对象,则应该从hibernate会话获取该对象,而不是转到数据库并等待释放行。

我不确定这是您的问题,但看起来您的代码是正确的(尽管在本例中,您最好使用Domain.lock(1)同时获取和锁定它,单独进行两个调用没有任何问题)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45860128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档