2013-07-20 50 views
1

我有一个域对象调用请求,有一个状态ENUM与下面的查询值GRAILS GORM显示错误的结果,同时与枚举类型

Request { 
    Status status 
} 

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

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

当我查询的请求对象Request.findByStatus(Status.Processed)我找回所有的记录包括状态被拒绝和进度的记录。有人可以告诉我究竟发生了什么问题,或者我需要修复这些问题。我也试过用以下标准查询

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

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

+0

打开SQL日志,看看正在发生什么 –

回答

1

一般来说Enums是大写的(以避免与普通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 
+0

我曾试图同,但没有运气还是我不断收到的所有记录,当我做Request.findByStatus( Status.REJECTED) –