gpt4 book ai didi

Grails 枚举映射

转载 作者:行者123 更新时间:2023-12-03 15:17:50 24 4
gpt4 key购买 nike

在 Grails 中,有没有办法限制枚举映射到的列的大小。在以下示例中,我希望列类型为 char(2)

enum FooStatus {
BAR('br'), TAR('tr')
final static String id
}

class Foo {
FooStatus status

static constraints = {
status(inList:FooStatus.values()*.id,size:2..2)
}
}

inList 和 size 在导出 schema 时都没有任何影响,列类型保持其默认值 (varch(255))
如果我定义一个新的 UserType,也许我可以做到这一点。任何的想法 ?

谢谢
-ken

最佳答案

考虑到枚举在 GORM 中的内部映射方式,我认为这是不可能的。但是将代码更改为此有效:

enum FooStatus {
BAR('br'),
TAR('tr')
private FooStatus(String id) { this.id = id }
final String id

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


class Foo {
String status

FooStatus getFooStatus() { status ? FooStatus.byId(status) : null }
void setFooStatus(FooStatus fooStatus) { status = fooStatus.id }

static transients = ['fooStatus']

static constraints = {
status inList: FooStatus.values()*.id
}

static mapping = {
status sqlType: 'char(2)'
}
}

添加 transient getter 和 setter 允许您设置或获取字符串 (id) 或枚举值。

关于Grails 枚举映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3748760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com