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_問題。 –