-1

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

谢谢,唐

4

3 回答 3

1

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

于 2010-01-27T21:05:31.983 回答
0

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

于 2010-01-28T03:34:31.540 回答
0

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

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

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

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

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

我希望这有帮助!

于 2010-01-27T21:15:57.493 回答