私は同様の質問を見つけましたが、回答はありません。Grails 2.5.1(hibernate 3)criteria複数のテーブルを同じテーブルに結合
class SomeDomain {
static hasMany= [productData:ProductData]
}
ProductDataは、私は(ループで)特定のタイプの複数の製品を持っているすべてのSomeDomainsを見つけようとしている単純型/値のペア
です。現在の基準の該当部分を以下のようになります。
from some_domain this_ inner join product_data productdata_a1_ on this_.id=productdata_a1_.some_domain_id
where (productdata_a1_.type_id=4 and productdata_a1_.value='GC')
and (productdata_a1_.type_id=5 and productdata_a1_.value='P1')
は明らかに=のためでANDチェックに成功するTYPE_IDつもりはありません:
SomeDomain.createCriteria.list {
somedata.each { type, value ->
productData {
eq("type", type)
eq("value", value)
}
}
}
しかし、これは、SQLでの参加のみシングルを生成し、 4と= 5 ...
私が本当に好きなのは、product_dataへの2つの内部結合です...しかし、これを強制する方法を理解することはできません。
私は createAlias( "productData"、 "製品 - $ {インデックス}")しようとした、これは org.hibernate.QueryException与えた を:あなたは、複数の同じテーブルに参加する必要がある理由productData
私は基準クエリではなく、HQLでこれをやろうとしています。私はHQLで動作させることができますが、これはループで構築されています(したがって、同じテーブルにもっと多くの結合が必要な場合があります)。 a.valueとb.typeを一致させるためにa.typeが必要なので、2つの "ins"は機能しません... b.valueで一続きのa.typeを持つことはできません。シャツ:緑色の – Trebla
...またはサンプルデータ[4:GC、5:P1]を使用しているsomeDomainsを検索していた場合など、[シャツ:青、ズボン:緑]で誤ったProductDataが表示されます。私は、値GCとタイプ5、値P1のタイプ4の製品を持つsomeDomainsが必要です。解決策では、タイプ4のsomeDomains、値P1が正しくないことがわかります。 – Trebla
私はHQLであなたのための質問を見つけようとすることができました(これは私がこれらの時間の大半を使っているからです)。個人的に私は大きな違いは見えません。作成される基本クエリーは、近い/類似したクォートになります。あなたがそれについての専門家のために必要とすると思う基準照会が必要な場合。がんばろう。 – Vahid