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

时间:2015-07-06 05:07:28

标签: java hibernate jpa orm outer-join

最近我不得不在两个没有对象关系映射的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规范是否会在没有关系映射的情况下支持外连接的任何想法?

由于 勒凯什

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

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

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

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

相关问题