如何高效地连接表?

问题描述 投票:0回答:1

在 Java 中,使用 JPA 和 EclipseLink。假设我有 3 个表:Supplier、Order 和 Customer

我想获得所有有该供应商订单的客户。假设供应商和客户没有直接联系。它们只能通过订单加入来链接:

  • 一个订单可以有一个客户
  • 一个顾客可以有多个订单
  • 订单也链接到供应商
  • 一个供应商可以有多个订单
  • 一个订单只能有1个供应商

一种方法:

在 JPA 中,一旦你设置了模型/实体,你就可以做

EntityManager.find(Supplier.class, 1)

这将返回供应商及其订单,从那里我们可以获取订单并获取链接到该供应商的所有客户。但是这种方式获取所有数据,而我们只想要客户,不需要其他数据,这会给数据库和客户端带宽带来压力。

什么是更好的 JPA、JPQL 方法来仅获取链接到供应商的客户数据?我知道我可以进行原始查询,但这违背了 JPA 的目的。

java jpa eclipselink jpql
1个回答
0
投票

假设您已在

@ManyToOne
中定义了
Order
Customer
Supplier
的关系,则可以进行如下 JPQL 查询:

List<Customer> customers = entityManager.createQuery("select distinct o.customer from Order o where o.supplier.id = :supplierId").getResultList();
© www.soinside.com 2019 - 2024. All rights reserved.