それらの違いは何ですか?なぜ、どこで使用する必要があるのですか?私にはまったく違いがないように思えますか?
5 に答える
withCriteria { ... }
は基本的に の省略形ですcreateCriteria().list { ... }
。他の基準メソッド (get、count など) を使用する必要がある場合、またはページネーション パラメーターを渡すlist
必要がある場合は、長い形式を使用する必要があります。
SomeDomain.createCriteria().list(max:10, offset:50) {
// ...
}
の 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()
ん。
の例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)
}
withCriteria が実行され、リストが返されます。実行前に基準をカスタマイズできるクロージャーを提供します。
createCriteria は、変更可能な基準オブジェクトを作成し、リスト メソッドを明示的に呼び出して実行するだけです。
基準が単純な場合、または単一の場所で定義されている場合は、withCriteria を使用することをお勧めします。
基準を渡す必要がある場合 (ある関数で作成し、他の関数に渡す)、 createCriteria の方が適しています。withCriteria のサポートは限られていると思います。
withCriteria ->
目的 -> Criteria クエリのインライン実行を許可します。一致するレコードが見つからない場合は、空のリストが返されます。
射影が指定されている場合:
returns a single value if it only contains one field
a List in case there are multiple fields in the projection