<分区>
我有实体 Product 和 Category,它们通过简单的多对多关系连接在一起。我想获得按单个类别过滤的分页产品列表。我正在尝试编写一个 Spring Data JPA
自动方法或一个 JPQL
查询方法来生成类似于以下内容的 SQL
:
select [...] FROM ProductToCategory ptc INNER JOIN Product p ON ptc.product_id=p.id WHERE ptc.category_id=? LIMIT ? OFFSET ?
由于 ProductToCategory
连接表不是 JPA 实体
并且我无法在 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
产生了与 Category 表的冗余连接,并在那里应用了 where 子句,而不是 ProductToCategory
中的类别 id
> 表。有没有一种方法可以在不求助于 native SQL
的情况下执行此操作?