2

我正在尝试在 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");

mysql 上的 SQL 查询工作正常,但 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
4

1 回答 1

10

问题在于您编写查询的方式。因为您使用 O.customer.XXXX,Hibernate 将 Order 和 Customer 之间的内部连接添加到查询中以解析 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

如果您查看 hibernate 从您的查询生成的 SQL,您会看到它在 Order 和 Customer 之间执行内部联接和右内部联接。

于 2013-09-12T02:29:36.920 回答