【发布时间】:2015-06-11 01:11:16
【问题描述】:
我有实体 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 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 表中的类别id 上。有没有办法在不求助于原生 SQL 的情况下做到这一点?
【问题讨论】:
标签: java hibernate jpa pagination spring-data