0

我不知道为什么我用 roo 命令创建新实体,它总是有一个文件名版本。

版本字段有什么好处?

如果我不想要它,如何编写不会在实体中生成版本文件的 roo 命令。

4

1 回答 1

2

该字段使用@javax.persistence.Version 进行注释,实体管理器使用它来创建乐观锁定。

让我们来看看这个场景:有一个 CD 列表应用程序。

用户可以打开带有 CD 数据的表格并可以对其进行修改。您不能锁定数据库中的记录并等待用户是否要修改记录(例如,使用 SELECT ... FOR UPDATE),因为它花费的时间太长(从数据库的角度来看)。很可能连接在读取数据并返回池后关闭。

相反,当您保存记录时,实体管理器会检查数据库中的版本字段是否与您发送的相同。如果是,那么您可以安全地保存更改并将版本增加 1。如果有人在您在屏幕上编辑记录时修改了记录,那么数据库中的版本高于您的,您无法保存数据,因为对方已经这样做了。这实际上是锁定(如果其他人这样做,您将无法保存)并且是乐观的,因为它仅在有修改时“锁定”,而在大多数情况下并非如此,并且当它不使用数据库时它不使用数据库不得不。

于 2012-04-26T14:21:08.333 回答