是否包含'不包含' createCriteria的域对象的collection属性的功能?

时间:2014-06-12 09:04:09

标签: grails hql createcriteria

我遇到与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 的所有帖子的列表?

3 个答案:

答案 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。 :如果有人有更好的解决方案,请回答。感谢