【问题标题】:Grails Version ColumnGrails 版本栏
【发布时间】:2011-06-21 10:59:21
【问题描述】:

我有一个从 1.0.3 迁移到 1.3.7 的 Grails 应用程序

据我了解,使用版本号的表将从零开始,并在行更新时自动递增。我拥有的所有旧数据都显示每行的版本单元格为空,但输入的新行的版本号为 0。

Grails 1.0.3 版不支持这个概念吗?我是否应该将所有适当表的所有这些行更新为用户 0 而不是 null?有什么影响?谢谢。

【问题讨论】:

    标签: grails


    【解决方案1】:

    Grails 一直支持版本列来实现 Hibernate 的乐观锁定。当您更新实例时,Hibernate 会生成比较当前版本和以前版本的 SQL,如果它们不同,则会抛出异常。由于 SQL null 永远不会等于任何值,因此任何更新这些行的尝试都会触发异常。

    虽然修复很简单 - 只需运行查询将空值设置为 0,例如 update table_name set version=0 where version is null

    完成此操作后,您应该将这些列更改为非空,以避免将来出现空值。

    【讨论】:

    • 太好了,感谢您提供的信息。关于此列如何首先具有空值的任何想法?该项目在先前版本的 Grails 上启动并运行,没有引发异常。我可以确认您所说的 - 现在它们在更新时被抛出,但我无法解释为什么它们之前没有被抛出。再次感谢您的帮助。
    • 我想不出有什么办法可以做到这一点,除非有人手动将列添加为可为空
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多