我正在查看数据库转储文件,我在各种表中看到许多记录,其版本号设置为0以外的值(在一种情况下甚至为94)。我知道它与hibernate锁定策略有关,但我担心的是今天是星期天,而且该网站几乎没有访问者,所以:这是正常的吗?或者是否存在一个已知的hibernate错误甚至是一些编程问题导致这种错误?
顺便说一句,在恢复数据库备份时,是否安全/建议手动将这些值重置为零?
答案 0 :(得分:2)
Hibernate版本字段实际上只是该记录保存次数的计数(好吧,减去1,因为它第一次保存该值为0)。请注意,此数字实际上不是已使用作为保存计数,因此任何时候的实际值都不重要。
它的使用方式是确定在您读取行和您尝试保存行时是否已保存行。如果您读取行并且版本值为12,则稍后您更改了对象并尝试保存它。 Hibernate做的第一件事是检查该行中DB版本中的值是否仍为12.如果不是,那么其他一些进程已经保存了该行,因为您已经读过它,如果您现在保存,则可能会覆盖一些在上一次保存期间所做的更改。
回答你的问题......只要没有任何东西在潜在的读/存储过程的“中间”(如网站停止或某些此类),那么您可以将版本字段更改为您的任何数字喜欢。每次存储该行时,它都会从那里增加。
答案 1 :(得分:1)
此外,如果您不需要它,可以使用
将其关闭静态映射{ 版本错误 }