假设使用约束将优先级属性创建为字符串:
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/