2016-04-01 5 views
0

私は2つのGORMドメインクラスを持っています。 1つはカードであり、そのカードには多くの購入があります。特定の購入以上のカードを検索する方法はありますか?Grails hasmanyの正確な項目を多数検索しました

カード1::オレンジ、オレンジ、リンゴ カード2:リンゴ、オレンジ Card3:オレンジ、オレンジ CARD4:リンゴ、リンゴ、オレンジ

ができますここでは、4枚のカードを持っている例

かもしれません2つ以上のオレンジを持つすべてのカードを検索したいとします。そうするとカード1,3だけが返されます。購入名に基づいて検索すること。あなたのドメインクラスは、このようなものですと仮定すると、

+1

これはサブクエリで行うことができます。ドキュメントの「DetachedCriteria」を参照してください – droggo

答えて

0

...

class Card { 
    static hasMany = [purchases: Purchase] 
} 

class Purchase { 
    String name 
} 

はここであなたがそれを行うことができます方法は次のとおりです。

def cards = Card.withCriteria { 
    resultTransformer = org.hibernate.Criteria.DISTINCT_ROOT_ENTITY 

    sizeGe('purchases', 2) 

    purchases { 
     eq('name', 'orange') 
    } 
} 

代わりにサブクエリを使用するのではなく、あなたがsizeGe()を使用できる回数をカウントしますコレクションにあるアイテムのうち、提供された数以上のものを探します。

ただし、クエリにeq()を追加すると、グループ化によって重複した結果が結果に含まれます。サブクエリにはない副作用。そのため、DISTICT_ROOT_ENTITY結果トランスでは、の後に、の重複がフィルタリングされます。

私の記事hereから条件照会の詳細を知ることができます。

+0

実際には、これは購入の1つだけがオレンジであるように見えるようです。少なくとも2人はオレンジ色だと言うことができる方法はありますか? – moloch101

+0

ええと...それははるかに複雑な問題です。私はその質問に何度も答えました。私はこれがこれまでに見つけた最高の解決策だと思う:http://stackoverflow.com/questions/32856121/grails-how-to-best-construct-a-hibernate-criteria-builder-to-search-hasmany/32872048 #32872048 –

+0

驚くばかりです。それは同じ購入の複数を得るために働いたが、私はまだ1つの問題がある。 executeQueryを2回使用して2つのセットの共通部分を見つけようとしているので、ユーザーは複数の購入を指定できますが、executeQueryを2回実行しようとすると、もう一度試してみると最初の検索が返されます。どんな考えが起こっているの? – moloch101

関連する問題