在我的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文档,映射数据库列将存储pr
或pu
- id
属性的值。但是,似乎没有办法减少DB列的最大长度。我已经尝试添加以下两个
static constrtaints = {
searchPrivacy(size: 2..2, maxSize: 2)
}
但是在生成的架构中,列仍然是varchar(255)
谢谢, 唐
答案 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)
可能是个错误。您是否考虑过提交错误报告?