JPA 支持没有对象关系映射的外部连接

JPA support for outer joins without object relational mapping

最近我不得不在两个没有对象关系映射的 JPA 实体之间使用外部连接。根据规范和论坛帖子,仅当实体在 JPA 级别映射时才支持外部联接。

示例代码如下。要求是找没有订单的客户

@Entity
class Customer {
    private int id;
}
@Entity
class Order {
    private int customerId;
    public int getCustomerId() { return customerId; }
    public void setCustomerId(int customerId) { this.customerId = customerId ; }
}

就我而言,我不得不选择本机查询来完成工作。

关于未来的 JPA 规范是否支持没有关系映射的外部连接有什么想法吗?

谢谢 拉凯什

您可以使用 theta 样式的联接来模拟 INNER JOIN:

    select c, o
    from Customer c, Order o
    where c.id= o.customerId

大多数现代数据库引擎查询优化器会将它变成 INNER JOIN equivalent anyway

假设您在 Order 实体中有 customerId 字段 (Integer)。为了找到没有任何订单的客户,您可以使用子查询来避免外连接和本机查询:

select c from Customer c where id not in (select customerId from Order)

通过这种方式,您可以在 JPQL (HQL) 中实现相同的目标。