Grails:按属性查找域类

时间:2015-02-03 17:40:28

标签: grails groovy

我是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 }

有什么建议吗?

1 个答案:

答案 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'
    }
}