我有一个Grails应用程序,我将从1.0.3迁移到1.3.7
据我了解,使用版本号的表将从零开始,并在行更新时自动递增。我所有的遗留数据都显示每行的版本单元格为空,但输入的新行的版本号为0.
Grails的1.0.3版本不支持这个概念吗?我应该将所有适当的表的所有这些行更新为用户0而不是null吗?有什么影响?感谢。
答案 0 :(得分:6)
Grails始终支持版本列来实现Hibernate的乐观锁定。当您更新实例时,Hibernate会生成比较当前版本和先前版本的SQL,如果它们不同则会抛出异常。由于SQL null
永远不能等于任何内容,因此任何更新这些行的尝试都会触发异常。
修复很简单 - 只需运行查询将空值设置为0,类似于update table_name set version=0 where version is null
。
完成此操作后,您应该将这些列更改为非null,以避免将来出现空值。