0

试图想出一种简洁的方法来创建带有 NOT IN 子句的命名查询。限制类似乎没有“不在”构造。有人知道这样做的好方法吗?

解决方案

static namedQueries = {
        activeOnly {
            eq 'active', true
        }
        open {
            ne 'state', this.STATE_COMPLETED
        }
        my { user ->
            or {
                eq 'createdBy', user
                eq 'reviewer', user
                eq 'assignee', user
                eq 'requestedFor', user
                ilike 'notifyList', "%$user%"
            }
        }
        topLevel {
            not {'in'('type', [RequestType.Part])}
        }
    }

注意:必须引用“in”这个词,因为它是保留的。

这些命名查询可以这样使用:

Request.activeOnly.open.topLevel.list(params)
4

1 回答 1

1

也许是这样的:

Book.findAll("from Book b where b.author not in (?)", ['Borges', 'Sabato', 'Cortazar'])

或使用标准

Book.withCriteria {
    not {
        'in'('author', ['Borges', 'Sabato', 'Cortazar'])
    }
}

http://grails.org/doc/1.3.x/ref/Domain%20Classes/createCriteria.html - “in”标准方法的文档也有一个链式“not”方法。

于 2012-04-03T23:18:17.487 回答