2013-04-02 56 views
1

我是Grails和Goovy的新手。我已阅读看好Grails Framework docs和讨论VS悲观锁定hereGrails锁定级别

其讲清的文档是:

  • 的Grails默认使用乐观锁定。

  • 乐观锁可以被关闭(通过使用版本= FALSE)

  • 如果关闭乐观锁和关心丢失数据的并发更新发生,那么你必须启用悲观锁定(使用锁定( )方法)

我的问题:

  • 似乎有3种模式。两个明确命名:乐观和悲观,另一个暗示 - 在哪里你重写了乐观但未启用悲观。它是否正确?

  • 如果正确 - 调用这个“中间”状态是什么,并且这有什么合法用途? (问的原因是我正在检查someones代码,并且有很多这种“中间”状态的使用,他们不会问,没有记录它等)。

回答

1

我想如果关闭版本控制,基本上关闭锁定检查。所以第三个状态基本上不是版本控制=>所有的写入都经过,没有检测到冲突。

从“编程Grails的休眠章 -

Grails的默认启用乐观锁定所有域类和一般这不应该被改变。但是,如果您需要(例如映射到旧数据库或未更新的表并因此没有并发编辑风险),则可以使用版本false来禁用它。

1

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

首先,这是一篇非常好的和最近的(2012年11月)Marc Palmer的文章:The false optimism of GORM and Hibernate。其主要结论是,它很复杂,而且Grails并没有真正处理并发性。除非您真正理解Hibernate如何在数据库之上工作,以及Grails如何在Hibernate之上工作,否则您确实可能会在随机地方丢失数据或获得奇怪的异常。