当hasMany关系为NULL时,grails对象查询

时间:2015-05-23 15:17:54

标签: mongodb grails grails-domain-class

当hasMany属性为null时,无法获取对象列表。

Class User {
...
List<EMail> emails
static hasMany = [emails: EMail,... ]
static mappedBy = [emails: 'customer',...]
... 
}

电子邮件是另一个具有一些字符串属性的类

现在我正在尝试进行简单的查询:

方法1:

def users = User.findAllByEmailsIsEmpty()

这给出了错误:

 Queries of type IsEmpty are not supported by this implementation

方法2:

def users = User.findAllByEmailsIsNull()

这为所有用户提供了与之关联的电子邮件对象。

然后我考虑尝试Criteria Query(https://grails.github.io/grails-doc/latest/ref/Domain%20Classes/createCriteria.html

方法3:

def userCriteria = User.createCriteria()
    def users = userCriteria.list(){
        sizeEq('emails', 0)
    }

这给出了无结果(users.size()为0)

方法4:

def userCriteria = User.createCriteria()
    def users = userCriteria.list(){
        isNull('emails')
    }

这再次为所有用户提供了那些没有电子邮件的用户。

方法5:

 def userCriteria = User.createCriteria()
    def users = userCriteria.list(){
        isEmpty('emails')
    }

这给出了错误:     此实现不支持类型为IsEmpty的查询

方法6:

def userCriteria = User.createCriteria()
    def users = userCriteria.list(){
        eq('emails', null)
    }

这再次列出了所有用户。

PS: Grails is configured with Database as MongoDB.

2 个答案:

答案 0 :(得分:0)

我会使用grep方法。像这样:

nullEmailUsers = User.list().grep {
    !it.emails
}

答案 1 :(得分:0)

User.findAll {emails.id!= null}完成任务!