【发布时间】:2020-01-29 00:33:03
【问题描述】:
我有两个 JPA 实体:
@Entity
public class ClientEntity {
...
@OneToMany(fetch = LAZY)
private List<OrderEntity> orders;
}
@Entity
public class OrderEntity {
...
@ManyToOne
private ClientEntity client;
}
我正在使用 JPA 规范 API 进行 LEFT OUTER JOIN:
public static Specification<ClientEntity> allClientsOrders() {
return (root, query, cb) -> {
Join<ClientEntity, TestOrderEntity> join = root.join("orders", JoinType.LEFT);
return cb.and();
};
}
现在我需要得到标准的 JOIN 结果:如果一个客户在 DB 中有 3 个订单,我希望他每次返回 3 次,并有另一个订单。但是,它向我返回了 3 次客户,但每次客户都有所有 3 个订单。
正如我在日志中看到的那样,Java 正确发送了第一个 SQL 查询,然后像往常一样发送其他查询以向客户端填充订单。
如何防止这种情况并以一个客户 - 一个订单对的形式获得结果?
【问题讨论】:
标签: java database jpa spring-data-jpa left-join