2011-07-14 5 views
1

に参加。私は次のように試しました:基準は、次の例のドメイン指定されたテーブルのドメイン

def crit = User.createCriteria() 
def results = crit.list { 
    roles { 
    eq('authority', 'ROLE_ADMIN') 
    } 
} 

しかし、それはユーザーのプロパティ 'ロール'を見つけることができないと言います。私がこの基準を必要とするのは、検索対象のユーザーに追加のプロパティが存在するため、動的な検索ツールがこの状況では機能しないためです。

+0

結果にはどのようなことがありますか、どの程度の大きさになると思いますか? –

+0

私は 'UserRole'と' .collect {} 'をクエリしてそのユーザをオフにすることがオプションかどうか疑問に思っています。 –

+0

結果はかなり小さくなります。ただし、ユーザーから直接問い合わせを受ける必要がある他の関連付けもあります。他の多対多の関連付けも可能であると仮定します。 – Gregg

答えて

3

あなたの期待される結果が小さければ、それだけでこれを行うのに十分な、おそらく簡単です:

def c = UserRole.createCriteria() 
def users = c.list { 
    role { 
     eq('authority', 'ROLE_ADMIN') 
    } 
    user { 
     // additional user property constraints 
    } 
}.collect { it.user } 

あなたは結果の大規模なセットを期待して、またはあなたがそれらの上のページに必要がある場合は、私はのように、特定のはありませんよ。私はそこにこれを投げるだろうが、私はそれを試みたことはない。 projections { property('association') }を使用して動作させることができるかどうかわかりません。

def c = UserRole.createCriteria() 
def users = c.list { 
    projections { 
     property('user') // never tried this, but worth a shot 
    } 
    role { 
     eq('authority', 'ROLE_ADMIN') 
    } 
    user { 
     // additional user property constraints 
    } 
} 

あなたが実際に(hasManyでIE)UserRoleを参照し、あなたのUserまたはRoleクラスに定義された関係を持っていないので、私は、動作しますあなたはあなたの例でやろうとしているものとは思いません。

+0

結果はリストなので、 '} .collect {it.user}'を '} .user'に置き換えることで、最初のものをわずかに上げることができます。 –

+0

私は '} *。user'が必要ですか、それとも'} .user'自体は動作しますか?後者の構文が使われているのを見たことはありません。 –

+0

@Burt - また、おそらくあなたは尋ねる人でしょう。第2の例の「投影」は機能しますか?私はそれを試したことはありません。私はあなたの頭の上から分からないなら、自分で簡単なテストを設定します。 –

関連する問題