0

NOT IN 句を使用して名前付きクエリを作成する簡潔な方法を考え出そうとしています。制限クラスには「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 に答える