鉴于以下内容
class MyDomain {
enum State {
PRIMORDIAL,
INITIAL,
EXTENDED,
TERMINAL
}
State state
}
我希望'state'属性能够持久化,以便:
如何实现这一目标?
由于
答案 0 :(得分:2)
很确定答案是......不是很容易。枚举当前只在DB中存储1个值,因此如果您想要DB中的字符串,那么这是它必须发出ORDER BY的唯一数据。这就是说......一旦你将数据加载到Gorm Domain对象中,你就可以对它进行排序,但这不会使你的分页正确(如果你需要)。
您可以创建自己的类枚举类来包含订单和字符串,并将其映射到表中的两个字段,然后根据需要按顺序排序。我用我称之为“可能的值”或“菜单值”的方式做了很多事情;类似的东西:
class MenuValue {
String text
String description // used for mouseover, or some such
int sort_order
String group // used to retrieve all values for a menu/pulldown, etc.
}
然后,我通常会将代码放入我的灯具中,以便在需要测试时创建菜单选项等。
这比enum的好处是能够使用管理型crud屏幕动态更改菜单/选择的内容。您仍然可以通过以下方式“迭代”它们:
MenuValue.findAllByGroup( "groupname" ).sort { it.sort_order }.each { it -> iteration code }
所以,如果你有一个人必须从菜单中选择的课程,你可以这样做:
class SomeObject {
String something
MenuValue selectedValue
}
你可以检索所有SomeObjects,按MenuValue的sort_value排序,如:
params.sort = "selectedValue.sort_order"
params.order = "asc"
SomeObject.findAllBySomethingLike( search_term, params )
在编辑SomeObject时,您可以选择包含可能值的列表,并将select的名称设置为“selectedValue.id”,Grails将在数据绑定期间自动填充SomeObject中的selectedValue字段。对所选MenuValue的引用。
希望这是有帮助的