在grails中将枚举映射到数据库

在grails中将枚举映射到数据库,grails,groovy,enums,gorm,Grails,Groovy,Enums,Gorm,我的grails应用程序使用了很多枚举,但是当前针对枚举的GORM解决方案不是很令人满意,因为它暗示数据在代码中,因为GORM没有将枚举映射到数据库中 以前我们使用了一个包含不同类型枚举的大表,例如:在一个表中选择县和市。因此,数据库中的表将包含3列:枚举类型(县或市)、id和名称(哪个县或市) 现在我想把它们转换成真正的枚举,但对于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在这些日子里处理得很好,所以这应该不是个问题。