使用枚举类型查询时,GRAILS GORM显示错误的结果

时间:2013-07-20 04:25:40

标签: grails groovy gorm

我有一个名为Request的域对象,其状态ENUM具有以下值

Request {
  Status status
}

enum Status{
     Processed('processed')
     Rejected('rejected')
     InProgress('progress')

     String name
     Status(name){
         this.name=name
     }
}

当我将Request对象查询为Request.findByStatus(Status.Processed)时,我会收回所有记录,包括状态被拒绝和进度的记录。有人能告诉我到底出了什么问题,或者我需要解决什么问题。我也尝试使用以下标准查询

Request.createCriteria().list { 
    eq('status',Status.Processed)
}

但它仍然给了我所有记录。任何指针??

1 个答案:

答案 0 :(得分:1)

通常,枚举是大写的(以避免与普通的String实现混淆)。如果设置如下,它应该按预期工作:

enum Status{
     PROCESSED('processed')
     REJECTED('rejected')
     INPROGRESS('progress')

     private final String name

     Status(name){this.name=name}
     String value(){name}
}

[new Request(status: Status.INPROGRESS),
 new Request(status: Status.REJECTED),
 new Request(status: Status.PROCESSED)]*.save()

assert Request.findByStatus(Status.REJECTED) instanceof Request
assert Request.findByStatus(Status.REJECTED).status == Status.REJECTED
assert Request.findByStatus(Status.REJECTED).status.value==Status.REJECTED.value