1

私はこれにしばらく時間を費やしてきました。私の問題は、特定の基準と条件でドメインオブジェクトを戻すことです。

私はたくさんの自転車を持っています。同じようなホイールサイズの自転車が複数ある可能性があります。たとえば、5台のバイクを所有できます。

owner_id | bike | wheel | price | active | toolset | forLance
_________|______|_______|_______|________|_________|__________
15459    |liner |    12 |  100  |     Y  |   null  |   H       
15459    |larker|    15 |  150  |     Y  |   null  |   H      
15459    |jefro |    21 |  225  |     Y  |   null  |   H      
15459    |raz   |    21 |  230  |     Y  |   null  |   L      
15459    |jynx  |    21 |  295  |     Y  |   null  |   P      

以下の私のクエリは、重複しないホイールサイズと最低価格のすべての自転車を取得します。

MySQLクエリ:

select * from bike b 
where b.owner_id = 15459 
and not exists( select * from bike 
where wheels = b.wheels AND price < b.price 
and owner_id = b.owner_id)  and b.active = 'Y';

結果は私にバイクの列を与えるでしょう:ライナー、ラーカー、そしてジェフロ

grails // groovyでこれを行う同等の方法はありますか?(ライナー、ラーカー、ジェフロをドメインオブジェクトのリストに追加します)

私は次のような構造を使用してみました:

def bikes = Bike.executeQuery(...)
or
def bike = Bike.findAll(...)

しかし、私が作成したMySQLスクリプトと同様の構造でクエリを実行できるようには見えません。

助けてくれてありがとう!

4

1 に答える 1

2

MySQLでは、サブクエリを使用してデータを取得しています。AFAIKこれはGORMでは不可能です。あなたができることは、Hibernateクエリ言語(HQL)でそれを書くことです

ドメインクラスがBikeと呼ばれていると仮定しましょう。

Bike.findAll("from Bike as b where b.active = 'Y' and b.owner = :owner and b.id in elements(select b1.id from Bike where b1.owner = :owner and b1.active = 'Y' and b1.price < b.price)", ['owner':owner])
于 2012-04-05T09:51:11.737 に答える