Hibernate有条件的HQL连接

时间:2012-03-15 17:34:10

标签: hibernate join 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表达这个查询,但似乎要求join子句只包含一个条件。那么如何在HQL中表达类似的查询呢?

1 个答案:

答案 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')