21

それらの違いは何ですか?なぜ、どこで使用する必要があるのですか?私にはまったく違いがないように思えますか?

4

5 に答える 5

11

withCriteria { ... }は基本的に の省略形ですcreateCriteria().list { ... }。他の基準メソッド (get、count など) を使用する必要がある場合、またはページネーション パラメーターを渡すlist必要がある場合は、長い形式を使用する必要があります。

SomeDomain.createCriteria().list(max:10, offset:50) {
  // ...
}
于 2013-05-24T08:02:34.767 に答える
9

の grails ドキュメントで見つけたものを追加する価値がありcreateCriteria()ます。

このクエリにはページネーション パラメーター (max および offset) が含まれているため、これは getTotalCount() メソッドを含む PagedResultList を返し、ページネーションに一致するレコードの総数を返します。2 つのクエリが引き続き実行されますが、それらは自動的に実行され、結果と合計数が PagedResultList で結合されます。

ソース

これはgetTotalCount()、通話を開始することなく使用できることを意味します (それはあなたのために作られています)。これはとても役に立ちます。ドキュメントの例は次のとおりです。

def c = Account.createCriteria()
def results = c.list (max: 10, offset: 10) {
    like("holderFirstName", "Fred%")
    and {
        between("balance", 500, 1000)
        eq("branch", "London")
    }
    order("holderLastName", "desc")
}
println "Rendering ${results.size()} Accounts of ${results.totalCount}"

を使用している場合、この機能は使用できませwithCriteria()ん。

于 2014-11-05T22:11:42.817 に答える
5

の例createCriteria():

def criteria = OfferCredit.createCriteria {
    offer {
        eq('status', LeverageUtils.ACTIVE_STATUS)
        ge('expirationDate', new Date())
    }
    user {
        eq('userId', userId)
    }
    eq('status', LeverageUtils.ACTIVE_STATUS)
    order('creationDate', 'asc')
}

criteria.list()

の例withCriteria():

List<Supermarket> results = Supermarket.withCriteria {
    like("sp_street", params.street)
    productSupermarket {
         product {
            idEq(params.product)
        }
        // or just eq('product', someProduct)
    }
    maxResults(10)
}
于 2013-06-18T08:21:45.590 に答える
4

withCriteria が実行され、リストが返されます。実行前に基準をカスタマイズできるクロージャーを提供します。

createCriteria は、変更可能な基準オブジェクトを作成し、リスト メソッドを明示的に呼び出して実行するだけです。

基準が単純な場合、または単一の場所で定義されている場合は、withCriteria を使用することをお勧めします。

基準を渡す必要がある場合 (ある関数で作成し、他の関数に渡す)、 createCriteria の方が適しています。withCriteria のサポートは限られていると思います。

于 2013-05-24T07:02:42.877 に答える
2

withCriteria ->

目的 -> Criteria クエリのインライン実行を許可します。一致するレコードが見つからない場合は、空のリストが返されます。

射影が指定されている場合:

returns a single value if it only contains one field
a List in case there are multiple fields in the projection
于 2015-01-23T07:11:33.603 に答える