【问题标题】:Mapping enums onto database in grails将枚举映射到 grails 中的数据库
【发布时间】:2011-05-27 19:04:42
【问题描述】:

我的 grails 应用程序使用了很多枚举,但是当前 GORM 的枚举解决方案不是很令人满意,因为它暗示数据在代码中,因为 GORM 不会将枚举映射到数据库中。

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

现在我想将它们切换为真正的枚举,但 GORM 似乎不太可能。我试图用域类中的瞬态来做到这一点,但是 AFAIK 它仍然需要你已经存在一个静态枚举供类引用。

我完全迷路了,有人可以提示我从哪里或哪个功能可以得到我想要的吗?

【问题讨论】:

    标签: grails groovy enums grails-orm


    【解决方案1】:

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

    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 为例。
    【解决方案2】:

    简单地说,不要将枚举用于非静态且不太可能更改的数据。相反,请使用常规域类并引导所需的数据。

    【讨论】:

    • 感谢回复,我想加入表格毕竟是不可避免的。
    • 是的,但是 GORM 会为你做这件事,而且 SQL 在这些日子里处理得很好,所以这不应该是 AFAIK 的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多