Grails限制数据库列大小

时间:2010-01-27 16:04:58

标签: database hibernate grails gorm

在我的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)

谢谢, 唐

3 个答案:

答案 0 :(得分:1)

我不确定这是如何转换为grails的,但在Java中,它将使用属性上的@Column(length=2)注释完成。

答案 1 :(得分:0)

您的约束仅限制您可以持久保存的内容。

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

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

当你看到自己使用sqlType属性时,你应该总是在了望,因为你可能会失去你从hibernate获得的数据库独立性。 (请记住,并非所有数据库都支持相同的类型。)

您还可以使用'mapping'属性来处理自定义列名,复合键和ID生成策略等内容。

我希望这有帮助!

答案 2 :(得分:0)

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