我是Grails / groovy的新手,正在寻找一种优化的编写代码的方法。
域类:
class Visitors {
int ID;
String destination;
String status; // Status can be OK, FAIL, DONE, REDO, NEW, LAST, FIRST
.........
..........
}
现在在控制器中:
class VisitorsController {
def getVisitors() {
Visitors.findAllByStatus().each { } // This is where i have confusion
}
}
在上面的注释行中,我希望获取不 状态=确定的所有访客对象,然后进行循环并在那里更新< strong> status = REDO 。
状态在另一个类中定义:
public enum VisitorsStatusEnum { NEW, OK, FAIL, DONE, REDO, LAST, FIRST }
有什么建议吗?
答案 0 :(得分:3)
对枚举进行少量修改后,使用where
查询代替findAllBy
会产生预期结果。
//src/groovy
enum VisitorsStatusEnum {
NEW('NEW'), OK('OK'), FAIL('FAIL'),
DONE('DONE'), REDO('REDO'), LAST('LAST'), FIRST('FIRST')
private final String id
private VisitorsStatusEnum(String _value) {
id = _value
}
String getId() { id }
}
// Domain class
class Visitors {
Integer ID
String destination
VisitorsStatusEnum status
}
//Controller
class VisitorsController {
def getVisitors() {
def query = Visitors.where {
status != VisitorsStatusEnum.OK
}
// Prefer batch update instead
query.updateAll( status: VisitorsStatusEnum.REDO )
render 'Updated'
}
}