Я использую 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?