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 } 完成任务!
当 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 } 完成任务!