我是Grails和Goovy的新手。我已经查看了Grails框架文档以及关于乐观锁定和悲观锁定的讨论
从文档中可以清楚地看到:
-
Grails默认使用乐观锁定。
-
乐观锁定可以关闭(通过使用version=false)
-
如果您关闭乐观锁定并且关心并发更新时丢失的数据,那么您必须启用悲观锁定(通过使用lock()方法)
我的问题:
-
似乎有3种模式。两个显式命名:乐观和悲观,另一个隐含的-你已经覆盖了乐观,但没有启用悲观。这是正确的吗?
-
如果正确-这种"中间"状态被称为什么,是否有任何合法的用途?(问这个问题的原因是我正在审查某人的代码,有很多使用这种"中间"状态,他们没有问,没有记录它等....).
我认为如果你关闭版本控制,你基本上关闭了锁检查。因此,第三种状态基本上是无版本控制=>所有写入都通过,没有检测到冲突。
选自'Programming Grails'中的Hibernate章节-
Grails默认为所有域类启用乐观锁定,一般情况下不应该更改。但是,如果您需要这样做,例如,当映射到遗留数据库或未更新的表时,因此没有并发编辑的风险,您可以使用version false禁用它。"乐观"one_answers"悲观"不一定是全局模式。你可以用一种方式访问一个对象,用另一种方式访问另一个对象。
首先,这是Marc Palmer最近(2012年11月)写的一篇非常好的文章:GORM和Hibernate的错误乐观。它的主要结论是,它很复杂,而且Grails并不能很好地处理开箱即用的并发性。除非你真正理解Hibernate是如何在数据库之上工作的,以及Grails是如何在Hibernate之上工作的,否则你真的会丢失数据或者在随机的地方得到奇怪的异常。