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

时间:2010-12-19 08:02:16

标签: grails groovy enums gorm

我的grails应用程序使用了很多枚举,但目前用于枚举的GORM解决方案并不十分令人满意,因为它意味着数据在代码中,因为GORM不会将枚举映射到数据库中。

之前我们使用了一个包含不同类型枚举的大表,例如:一个表中的县和城市选择。因此,数据库中的表将包含3列:枚举类型(县或城市),ID和名称(县或城市)。

现在我想将它们切换到实际的枚举,但GORM似乎不太可能。我试图在域类中使用瞬态来实现它,但是AFAIK它仍然要求你有一个静态枚举已经存在供类引用。

我完全迷失在这里,任何人都可以提示我从哪里或哪些功能得到我想要的东西?

2 个答案:

答案 0 :(得分:1)

简单地说,不要将Enums用于非静态且不太可能改变的数据。而是使用常规域类并引导所需的数据。

答案 1 :(得分:0)

也许这段代码是你想要的:

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" 
/>