在 Java 中,使用 JPA 和 EclipseLink。假设我有 3 个表:Supplier、Order 和 Customer
我想获得所有有该供应商订单的客户。假设供应商和客户没有直接联系。它们只能通过订单加入来链接:
在 JPA 中,一旦你设置了模型/实体,你就可以做
EntityManager.find(Supplier.class, 1)
这将返回供应商及其订单,从那里我们可以获取订单并获取链接到该供应商的所有客户。但是这种方式获取所有数据,而我们只想要客户,不需要其他数据,这会给数据库和客户端带宽带来压力。
什么是更好的 JPA、JPQL 方法来仅获取链接到供应商的客户数据?我知道我可以进行原始查询,但这违背了 JPA 的目的。
假设您已在
@ManyToOne
中定义了 Order
与 Customer
和 Supplier
的关系,则可以进行如下 JPQL 查询:
List<Customer> customers = entityManager.createQuery("select distinct o.customer from Order o where o.supplier.id = :supplierId").getResultList();