Grails:通过 属性 查找域 class

Grails : Find domain class by property

我是 Grails/groovy 的新手,正在寻找一种优化的代码编写方式。

域class:

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

在上面的注释行中,我想获取所有 具有 status = OK 的 Visitors 对象,然后通过循环并在那里更新 status = REDO.

状态定义在另一个class:

public enum VisitorsStatusEnum { NEW, OK, FAIL, DONE, REDO, LAST, FIRST }

有什么建议吗?

对枚举稍作修改并使用 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'
    }
}