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 2

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 генерируется из вашего запроса, вы бы увидели, что он выполняет как внутреннее соединение, так и правильное внутреннее соединение между заказом и клиентом.