我遇到与this类似的问题。但我想要不包含功能。
就像我有一个Post域名。帖子 hasMany 用户。 我想用createCriteria做的事情是这样的:
def c = Post.createCriteria()
def l = c.list (max: maxVar) {
notContains("users", thisUser)
}
我尝试使用 ne 但没有运气。
def l = c.list (max: maxVar) {
users {
ne('id', thisUser.id)
}
}
要明确的是,我如何获得其收集的用户字段不包含 thisUser 的所有帖子的列表?
答案 0 :(得分:2)
您可以将HQL
用于此
List<Post> posts = Post.executeQuery("select distinct p from Post p where :myUser not member of p.users", [myUser: user, max: maxVar])
答案 1 :(得分:0)
c.list (max: maxVar) { not { 'in'("users", thisUser) }}
将返回没有此用户的列表。这适用于grails版本2. *。您可能需要覆盖User类的.equals。
还有许多其他方法,例如使用.find。请参阅此链接http://groovy.codehaus.org/JN1015-Collections
答案 2 :(得分:0)
我无法获得传统解决方案,但我使用两个单独的查询解决了这个问题。
首先,我使用
获得用户包含 thisUser 的所有帖子 users {
eq('id', thisUser.id)
}
然后我得到了最大数量的帖子,其ID与上面的任何id都不匹配。
Post.findAllByIdNotInList(usersList.id, [max:15])
其中 usersList 是第一次查询的结果
P.S。 :如果有人有更好的解决方案,请回答。感谢