hasMany关系为NULL时的grails对象查询

grails Objects query when hasMany relationship is NULL

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

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

其中电子邮件是另一个 Class 具有一些字符串属性

现在我正在尝试做一个简单的查询:

方法一:

def users = User.findAllByEmailsIsEmpty()

这是错误的:

 Queries of type IsEmpty are not supported by this implementation

方法二:

def users = User.findAllByEmailsIsNull()

这给了所有用户,即使是那些拥有与之关联的电子邮件对象的用户。

然后我想到了Criteria Query (https://grails.github.io/grails-doc/latest/ref/Domain%20Classes/createCriteria.html )

方法三:

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

这没有结果(users.size() 是 0)

方法四:

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

这再次为所有用户提供了权限,即使是那些没有电子邮件的用户。

方法五:

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

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

方法六:

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

这再次列出了所有用户。

PS: Grails is configured with Database as MongoDB.

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

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

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