HQL правое внешнее соединение
Я пытаюсь выполнить правое внешнее соединение в HQL. Создание запроса выполняется следующим образом:
Query query = this.sessionFactory
.getCurrentSession()
.createQuery(
"select O.customer.id as id, O.customer.firstName as firstName, O.customer.lastName as lastName, O.customer.address as address, O.customer.city as city, count(O.id) as totalOrders from Order O right outer join O.customer group by O.customer.id");
SQL-запрос на mysql работает нормально, но запрос HQL возвращает результат для внутреннего соединения.
SQL-запрос:
select c.id,
c.firstname,
c.lastname,
c.city,
count(o.id) as total_order
from orders o right outer join customers c
on c.id = o.customer_id group by id
1 ответ:
Проблема заключается в том, как вы написали свой запрос. Потому что вы используете О. клиента.XXXX, Hibernate добавляет внутреннее соединение между заказом и клиентом к запросу, чтобы разрешить O. customer. Вам нужно переписать запрос, чтобы использовать результаты правильного внутреннего соединения, введя псевдоним для O. customer в правильном внутреннем соединении.
select C.id as id, C.firstName as firstName, C.lastName as lastName, C.address as address, C.city as city, count(O.id) as totalOrders from Order O right outer join O.customer C group by C.id
Если бы вы посмотрели на SQL, который hibernate генерируется из вашего запроса, вы бы увидели, что он выполняет как внутреннее соединение, так и правильное внутреннее соединение между заказом и клиентом.