我正在使用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表达这个查询,但似乎要求join子句只包含一个条件。那么如何在HQL中表达类似的查询呢?
答案 0 :(得分: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')