2012-04-04 13 views
1

私はこれに少し時間を費やしてきました。私の問題は、特定の条件と条件でドメインオブジェクトを戻すことです。grails findAll(条件またはexecuteQuery)

私は大きな自転車を持っています。車輪のサイズが類似した複数の自転車がある可能性があります。たとえば、私は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'; 

結果は私のバイクを持つ行を与える:ライナー、larker、およびをjefro。

grails // groovyでこれと同等の方法がありますか? (ライナー、larkerを取得し、ドメインオブジェクトのリストにをjefro)

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

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

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

ありがとうございました!

答えて

2

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

あなたのドメインクラスは自転車と呼ばれると仮定します。

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]) 
関連する問題