grails 枚举或字符串属性, future 的数据库更新有什么区别?

标签 grails

假设使用约束将优先级属性创建为字符串:

priority(inList:['Critical', 'Major', 'Normal', 'Enhancement'])

另一种方法可能是以这种方式使用枚举:
enum Priority { CRITICAL, MAJOR, NORMAL, ENHANCEMENT }  or
enum Priority { CRITICAL('Critical'), MAJOR('Major'), NORMAL('Normal'), ENHANCEMENT('Enhancement')

Priority priority
    ...

可能还有以下内容,具体取决于上面如何定义枚举:
static mapping = { priority enumType:"ordinal"} 

我的问题是,添加 future 的枚举值是否可以很好地与数据库一起使用,只要最后添加它们?此外,如果我确实希望更改枚举值的解释,那么最好的方法是这样做,例如:
 ... NORMAL('Minor')

或者如果我只是根据需要更改列表中的第三项,例如,事情是否会正常运行
    MINOR or  MINOR('Minor')

最佳答案

它们出现的顺序无关紧要。在内部,Grails 只会在给定字符串表示的情况下进行 valueOf 查找。现在,如果您没有适本地更新数据库,更改一个名称将导致问题。如果您知道这会发生,那么在生产中,您可能会重新考虑枚举并使用类型表作为引用。这样,您只是使用 ID,因此字符串值是什么并不重要。

我倾向于使用 2 的某种组合。我知道硬常数和快速常数的枚举通常会在生产中保持稳定。但是在用户需要能够添加/修改/删除各种值的情况下键入表,或者如果我知道我将拥有某种类型的数据仓库,由于外键,键入表会更好/更快,使用您的工厂存储系统(MySQL、Postgres 等)的运行。

关于grails 枚举或字符串属性, future 的数据库更新有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8042512/

相关文章:

grails - 与团队之城

grails - 在Grails中进行测试时,如何从域类中调用方法?

java - Grails STS 环境中运行时和编译的不同 JRE

java - 使用 Castor 和 Grails 进行 XML 解码

hibernate - Grails:乐观锁定,StaleObjectStateException与Spring Security session 中的域,更新计数器

grails - 安装Grails Drools插件时涉及的手动步骤

由于重定向循环,Grails Spring Security 无法显示登录页面

grails 2.0.0.RC1 应用程序在 Ubuntu 上失败

java - 无法在 tomcat 中部署 Grails War 文件 - 结果为 404

grails - Grails Quartz插件并发不起作用