【问题标题】:Grails locking levelsGrails 锁定级别
【发布时间】:2013-04-02 09:06:01
【问题描述】:

我是 Grails 和 Goovy 的新手。我已经查看了Grails Framework docs 以及关于乐观与悲观锁定here 的讨论

从文档中可以清楚地看出:

  • Grails 默认使用乐观锁。

  • 可以关闭乐观锁定(通过使用 version=false)

  • 如果您关闭乐观锁定并担心在发生并发更新时丢失数据,那么您必须启用悲观锁定(通过使用 lock() 方法)

我的问题:

  • 好像有3种模式。两个明确命名:乐观和悲观,另一个隐含 - 您已覆盖乐观但未启用悲观。这是正确的吗?

  • 如果正确 - 这种“中间”状态称为什么,是否有任何合法用途? (询问的原因是我正在审查某人的代码,并且这种“中间”状态有很多用途,他们没有问,没有记录它等等......)。

【问题讨论】:

    标签: database grails grails-orm


    【解决方案1】:

    我认为,如果您关闭版本控制,您基本上就是在关闭锁检查。所以第三种状态基本上是无版本控制=>所有写入都通过,没有检测到冲突。

    来自“Programming Grails”的 Hibernate 章节 -

    Grails 默认为所有域类启用乐观锁定,通常不应更改此设置。但是,如果您需要,例如在映射到旧数据库或未更新的表时,因此没有并发编辑的风险,您可以使用版本 false 禁用它。

    【讨论】:

      【解决方案2】:

      “乐观”和“悲观”不一定是全局模式。您可以以一种方式访问​​一个对象,并以另一种方式访问​​另一个对象。

      首先,这是 Marc Palmer 最近(2012 年 11 月)撰写的一篇非常好的文章:The false optimism of GORM and Hibernate。它的主要结论是,嗯,它很复杂,而且 Grails 并不能真正很好地处理开箱即用的并发性。除非您真正了解 Hibernate 如何在数据库之上工作,以及 Grails 如何在 Hibernate 之上工作,否则您确实会在随机位置丢失数据或出现奇怪的异常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-27
        • 2013-09-23
        相关资源
        最近更新 更多