1

我是 Grails 和 Goovy 的新手。我已经查看了Grails 框架文档 和关于乐观与悲观锁定的讨论here

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

  • Grails 默认使用乐观锁。

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

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

我的问题:

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

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

4

2 回答 2

1

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

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

于 2013-10-10T02:08:02.960 回答
1

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

从'Programming Grails'的Hibernate章节 -

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

于 2013-04-02T15:01:18.953 回答