2012-03-15 49 views
1

我正在使用Hibernate映射到我无法更改的遗留数据模型。对于特定的查询,我试图构建一些使用包含多个属性的连接条件的HQL。我有一个可怕的人为的例子,说明什么,我想实现:Hibernate条件HQL加入

考虑类Consumer和它的两个特性 - 无论Gadget类型:

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

注意,consumer表有两个外键gadget表 - 不理想 - 但这是我必须与之合作。我想获得名为'iphone'的Gadgets列表,Consumer'bob'用作MP3播放器或电话。用postgres我可以写:

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来表达这个查询,但它似乎要求连接子句只包含一个条件。那么如何在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 2012-03-16 11:55:34

+0

好的,事实证明我问的是错误的问题 - 我的歉意。这个问题现在已经更新。 – teabot 2012-03-16 11:59:19