2
我目前的工作在哪里我已经给它具有Order
实体的集合,Customer
和Order
之间,因此一个一对多关系的实体Customer
的项目。假设我想选择具有相应数量的Order
实体(在SQL中称为COUNT
)的集合的子集:Spring Data JPA提供的查询方法是否已经存在缺省实现以避免用JPQL写一个自定义查询,在一个SQL查询中获取客户的订单数量而不是n + 1查询其中n是客户数量?或者某种注释可以在Customer
中添加某种瞬态字段,例如long orderCount
?春天JPA与集合数
感谢你的答案和努力来设置这个演示git回购。不幸的是,这不是我正在寻找的答案。为了更好地了解您的示例中的含义:您可以实施额外的测试用例,以获取所有客户以及您想要了解订单数量的每位客户。因此,您已经在一个循环中使用了'customerRepository.findAll()'(将'customer'作为迭代变量,然后您可以访问例如'customer.getOrders()。size()',这会导致_n + 1_查询。我在**'Customer' **中讨论了某种瞬态字段'long orderCount' – Tom
另一种方法是将'customer.getOrders()'改为'FetchType.LAZY'并调用'orderRepository.countByCustomerId()'。 _n + 1_仅用于订单的COUNT,这不是太繁琐 –
另一种方法是为'customer.getOrders()'保留'FetchType.EAGER'并使用特定于Hibernate的注解@Fetch( value = FetchMode.JOIN)'这将通过LEFT OUTER JOIN在一个SQL查询中获得一个客户和所有订单,完全绕过_n + 1_问题。 –