最近我不得不在两个没有对象关系映射的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规范是否会在没有关系映射的情况下支持外连接的任何想法?
由于 勒凯什
答案 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)中实现相同的目标。