Присоединяйтесь без ассоциации в HQL - PullRequest
38 голосов
/ 10 июня 2009

Допустим, у меня есть две таблицы (A, B) вроде:

A {id, a, c}
B {id, b, c}

У меня есть и их сущности. Я хочу написать HQL, чтобы набор результатов был похож (где A.c = B.c):

(a1, b1, c1)
(a2, b2, c2)
(a3, b3, c3)
...

Поскольку предложения on не поддерживаются hibernate, я застрял и не знаю, как написать запрос.

Ответы [ 3 ]

49 голосов
/ 10 июня 2009

Вы должны использовать нотацию перекрестного соединения:

from A as table_a , B as table_b
where table_a.c = table_b.c

Конечно, нет способа реализовать внешние объединения таким образом, поэтому у вас могут возникнуть проблемы, если это ваш случай.

Аналогичный случай с критериями: hibernate-критерии-таблица-объединения-без-сопоставленной-ассоциации

2 голосов
/ 19 ноября 2013

Если вы хотите сделать внешнее объединение, вы можете сделать подзапрос и управлять операцией ИЛИ (это работает для меня). это делает запрос более сложным и худшим, но работает: -)

0 голосов
/ 22 декабря 2015

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

пусть:

A {id (первичный ключ), a, c} B {id (внешний ключ), b, c}

определить переменную типа parent (A) с помощью setter и getter в pojo класса B. После этого вы можете написать запрос таким способом. пусть это "АА"

select tbl_b.a,tbl_a.a,tbl_b.b,tbl_a.b,tbl_b.c,tbl_a.c from B tbl_b inner join tbl_b.AA tbl_b
...