Hibernate условное соединение HQL - PullRequest
2 голосов
/ 15 марта 2012

Я использую Hibernate для сопоставления с устаревшей моделью данных, которую я не могу изменить.Для конкретного запроса я пытаюсь построить некоторый HQL, который использует условие соединения, которое охватывает более одного свойства.У меня есть ужасно надуманный пример, который иллюстрирует, чего я пытаюсь достичь:

Рассмотрим класс Consumer и два его свойства - оба типа Gadget:

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

Обратите внимание, чтотаблица consumer имеет два внешних ключа к таблице gadget - не идеально - но это то, с чем мне приходится работать.Я хочу получить список Gadgets с именем «iphone», который 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 Ответ

1 голос
/ 15 марта 2012
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')   
...