【问题标题】:Grails limit database column sizeGrails 限制数据库列大小
【发布时间】:2010-01-27 16:04:58
【问题描述】:

在我的 Grails 应用程序中,我有一个具有属性的域类

SearchPrivacy searchPrivacy = SearchPrivacy.PUBLIC

其中 SearchPrivacy 是一个枚举

enum SearchPrivacy {
    PRIVATE('pr'), PUBLIC('pu');

    final String id

    SearchPrivacy(String id) {
        this.id = id
    }

    static getEnumFromId(String id) {
        values().find {it.id == id}
    }
}

根据 Grails 文档,映射的数据库列将存储 prpu - id 属性的值。但是,似乎没有办法减少 DB 列的最大长度。我已经尝试添加以下两个

static constrtaints = {
    searchPrivacy(size: 2..2, maxSize: 2)
}

但在生成的架构中,该列仍然是varchar(255)

谢谢, 唐

【问题讨论】:

  • @Don,你的问题解决了吗?

标签: database hibernate grails grails-orm


【解决方案1】:

我不确定这如何转换为 grails,但在 Java 中可以通过属性上的 @Column(length=2) 注释来完成。

【讨论】:

  • “in Java”是指“in Hibernate”吗?
【解决方案2】:

很可能是一个错误。您是否考虑过提交错误报告?

【讨论】:

    【解决方案3】:

    您的约束只会限制您可以坚持的内容。

    如果您想修改持久化的实际 SQL 类型,您需要在域类中声明一个名为“映射”的静态属性 - 就像您已经为约束所做的那样。它看起来像这样:

    static mapping = {
      searchPrivacy type: SearchPrivacy, {
        sqlType: "char(2)"
      }
    }
    

    当您看到自己使用 sqlType 属性时,您应该始终保持警惕,因为您可能会失去从休眠中获得的数据库独立性。 (请记住,并非所有数据库都支持相同的类型。)

    您还可以使用“映射”属性来处理自定义列名、复合键和 ID 生成策略等内容。

    我希望这会有所帮助!

    【讨论】:

    • “约束只限制你可以坚持的东西”是不正确的。如果您查看 Grails 文档中的约束,其中许多会说“此约束影响模式生成”
    • 我在旧文档中看到了这一点。我会删除它。映射属性是否解决了您的问题?
    • @Don:它只会影响你创建一个新的数据库。对于旧数据库,它什么也不做,并使用旧的列定义。这就是 Hibernate 的工作原理。不过,我不确定 Brandon 的 sqlType 映射。
    猜你喜欢
    • 1970-01-01
    • 2017-01-13
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多