在grails中将枚举映射到数据库
我的grails应用程序使用了很多枚举,但是当前针对枚举的GORM解决方案不是很令人满意,因为它暗示数据在代码中,因为GORM没有将枚举映射到数据库中 以前我们使用了一个包含不同类型枚举的大表,例如:在一个表中选择县和市。因此,数据库中的表将包含3列:枚举类型(县或市)、id和名称(哪个县或市) 现在我想把它们转换成真正的枚举,但对于GORM来说似乎不太可能。我试着在域类中使用瞬态来实现这一点,但至少它仍然要求您已经存在一个静态枚举,以便类引用在grails中将枚举映射到数据库,grails,groovy,enums,gorm,Grails,Groovy,Enums,Gorm,我的grails应用程序使用了很多枚举,但是当前针对枚举的GORM解决方案不是很令人满意,因为它暗示数据在代码中,因为GORM没有将枚举映射到数据库中 以前我们使用了一个包含不同类型枚举的大表,例如:在一个表中选择县和市。因此,数据库中的表将包含3列:枚举类型(县或市)、id和名称(哪个县或市) 现在我想把它们转换成真正的枚举,但对于GORM来说似乎不太可能。我试着在域类中使用瞬态来实现这一点,但至少它仍然要求您已经存在一个静态枚举,以便类引用 我完全迷路了,有人能告诉我从哪里或者哪个函数可以得
我完全迷路了,有人能告诉我从哪里或者哪个函数可以得到我想要的吗?也许这段代码就是你想要的:
enum UserOrderState
{
WAITCHECK("Ожидает проверки"),
INWORK("Выполняется"),
DONE("Выполнен"),
CANCELED("Отменен"),
NOPRODUCT("Нет в наличии")
String name
UserOrderState(String name)
{
this.name = name
}
static list()
{
[ WAITCHECK, INWORK, DONE, CANCELED, NOPRODUCT ]
}
}
然后在.gsp中,您可以通过以下方式创建组合框:
<g:select
name="state"
from="${internetshop.UserOrderState.list()}"
value="${fieldValue(bean: order, field: 'state')}"
optionValue="name"
/>
也许这是您想要的代码:
enum UserOrderState
{
WAITCHECK("Ожидает проверки"),
INWORK("Выполняется"),
DONE("Выполнен"),
CANCELED("Отменен"),
NOPRODUCT("Нет в наличии")
String name
UserOrderState(String name)
{
this.name = name
}
static list()
{
[ WAITCHECK, INWORK, DONE, CANCELED, NOPRODUCT ]
}
}
然后在.gsp中,您可以通过以下方式创建组合框:
<g:select
name="state"
from="${internetshop.UserOrderState.list()}"
value="${fieldValue(bean: order, field: 'state')}"
optionValue="name"
/>
简单地说,不要对非静态且不太可能更改的数据使用枚举。相反,使用常规域类并引导所需的数据。简单地说,不要对非静态且不太可能更改的数据使用枚举。相反,请使用常规域类并引导所需的数据。谢谢您的回复,但这正是我试图避免的:代码中的数据。但这是在域中使用枚举编码的唯一方法。另一种方法是以域UserOrderState为例。感谢回复,但这正是我试图避免的:代码中的数据。但这是在域中使用枚举编码的唯一方法。另一种方法是以域UserOrderState为例。谢谢回复,我想加入表毕竟是不可避免的。是的,但GORM会帮你做的,SQL在这些天处理得很好,所以这应该不是一个问题。谢谢回复,我想加入表毕竟是不可避免的。是的,但是GORM会帮你做的,SQL在这些日子里处理得很好,所以这应该不是个问题。