【发布时间】:2011-06-21 10:59:21
【问题描述】:
我有一个从 1.0.3 迁移到 1.3.7 的 Grails 应用程序
据我了解,使用版本号的表将从零开始,并在行更新时自动递增。我拥有的所有旧数据都显示每行的版本单元格为空,但输入的新行的版本号为 0。
Grails 1.0.3 版不支持这个概念吗?我是否应该将所有适当表的所有这些行更新为用户 0 而不是 null?有什么影响?谢谢。
【问题讨论】:
标签: grails
我有一个从 1.0.3 迁移到 1.3.7 的 Grails 应用程序
据我了解,使用版本号的表将从零开始,并在行更新时自动递增。我拥有的所有旧数据都显示每行的版本单元格为空,但输入的新行的版本号为 0。
Grails 1.0.3 版不支持这个概念吗?我是否应该将所有适当表的所有这些行更新为用户 0 而不是 null?有什么影响?谢谢。
【问题讨论】:
标签: grails
Grails 一直支持版本列来实现 Hibernate 的乐观锁定。当您更新实例时,Hibernate 会生成比较当前版本和以前版本的 SQL,如果它们不同,则会抛出异常。由于 SQL null 永远不会等于任何值,因此任何更新这些行的尝试都会触发异常。
虽然修复很简单 - 只需运行查询将空值设置为 0,例如 update table_name set version=0 where version is null。
完成此操作后,您应该将这些列更改为非空,以避免将来出现空值。
【讨论】: