我有一些實體產品和類別,它們通過簡單的多對多關係進行連接。我想獲得按單個類別過濾的產品分頁列表。我試圖寫一個Spring Data JPA
自動的方法或JPQL
查詢方法會產生SQL
類似以下內容:JPA - 如何在查詢多對多關係時防止不必要的連接
select [...] FROM ProductToCategory ptc INNER JOIN Product p ON ptc.product_id=p.id WHERE ptc.category_id=? LIMIT ? OFFSET ?
由於ProductToCategory
連接表是不是JPA entity
,我不能引用它JPQL
,我能想出最接近的事情是:
@Query("SELECT p FROM Category c INNER JOIN c.products p WHERE c=:category")
Page<Product> findByCategories(@Param("category") Category category, Pageable pageable);
但由此產生SQL
冗餘與分類表連接,並有應用where子句中,而不是在類別在ProductToCategory
表中。有沒有辦法做到這一點,而不訴諸於本地SQL
?