Hibernate Присоединиться с оператором OR - PullRequest
1 голос
/ 09 ноября 2009

Я пытаюсь выяснить, как создать простое объединение, использующее предложение 'или', содержащееся в нем, используя аннотации HQL или Hibernate. Вот пример того, как я хочу, чтобы SQL выглядел так:

select *
from tableA
left outer join tableB
    on tableA.id1 = tableB.id1
    or tableA.id2 = tableB.id2
where ...

Я знаю, что могу сделать прямой код SQL для этого, однако я хочу воспользоваться уровнем абстракции Hibernate. Я видел @JoinColumns, но это похоже на 'и' в соединении. Я использую это объединение с типизированным HQL-запросом, поэтому у меня также есть возможность немного отклониться от аннотаций и использовать его там ... есть идеи?

1 Ответ

1 голос
/ 09 ноября 2009

Я должен сказать, что это немного эзотерично; если бы можно было сопоставить вашу ассоциацию таким образом, она, скорее всего, работала бы довольно ужасно (если только обе задействованные таблицы не очень малы).

Но, насколько я знаю, это невозможно:

  1. Вы не можете напрямую сопоставить связь по ИЛИ-столбцам
  2. Нельзя использовать любой тип соединения, кроме перекрестное объединение над объектами, не связанными ассоциацией.
  3. Нельзя указать пользовательский загрузчик для чего-либо, кроме коллекции - содержит ли ваш tableB элементы коллекции для tableA строк? Даже если это так, вы сможете использовать этот загрузчик только для непосредственного извлечения коллекции; он не будет работать как часть более сложного запроса HQL.
...