2012-03-15 17 views
1

私は変更できないレガシーデータモデルにマップするためにHibernateを使用しています。特定のクエリでは、複数のプロパティを含む結合条件を使用するHQLを構築しようとしています。私は私が達成しようとしているものを示して恐ろしく不自然な例があります。Hibernate条件付きHQL結合

は、クラスConsumerとその2つのプロパティを考えてみましょう - タイプGadgetの両方:consumer表はに2つの外部キーを持っていることを

@Table(name = "consumer") 
class Consumer { 
    @Column(name = "mp3_player") 
    Gadget mp3Player; 
    @Column(name = "mobile_phone") 
    Gadget mobilePhone; 
    ... 

をお知らせgadgetテーブル - それは理想的ではありません - しかし、私はそれを扱う必要があります。 Consumer「bob」がMP3プレーヤーまたは電話として使用する「iphone」という名前のGadgetsのリストを取得したいと思います。 postgresので、私は書くことができます:私はHQLでこのクエリを表現することを試みたが、JOIN句は一つだけ条件が含まれていることを要求するように見える

select gadget.* 
from consumer join gadget on (
    consumer.mp3_player = gadget.id or consumer.mobile_phone = gadget.id 
) 
where consumer.name = 'bob' and gadget.name = 'iphone'; 

。では、HQLで同様のクエリをどのように表現できますか?

答えて

1
select consumer from Consumer consumer 
left join consumer.mp3Player mp3Player 
left join consumer.mobilePhone mobilePhone 
where consumer.name = 'Bob' 
and (mp3Player.name = 'iphone' or mobilePhone.name = 'iphone') 
+0

返信ありがとうございます - 私は質問からいくつかの詳細を逃したので、今更新することを認識しています。 – teabot

+0

それで、私は間違った質問をしていたことが判明 - 私の謝罪。質問が更新されました。 – teabot