Can Spring JPA可以匹配List的多个记录

时间:2017-10-06 10:45:50

标签: java spring hibernate jpa spring-data-jpa

我有一个名为product的类,它有很多标签。

此类对象定义如下:

public class Product{
    @ManyToMany
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<Tag> tags;
}

由于产品可能包含大量标签。如果我想同时选择带有标签A和B的产品。我可以用JPA方式实现吗?

我可以使用原生查询SELECT t.product_id FROM ta_product p INNER JOIN ta_product_tags t ON p.id = t.product_id GROUP BY t.product_id HAVING SUM(CASE WHEN t.tags_id IN (?1) THEN 1 ELSE 0 END) >= ?2 LIMIT ?3,?4轻松完成,但它不支持Pageable界面。

我尝试编写像这样的查询

@Query("SELECT COUNT(p.id) FROM Product p INNER JOIN p.tags t WHERE SUM(CASE WHEN t.id IN ?1 THEN 1 ELSE 0 END) >= ?2 ")
int countByTags(List<Long> tagIds, long length);

它告诉我Invalid use of group function

我可以使用Pageable接口的任何解决方案吗?

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案

@Query("SELECT COUNT (p1.id) FROM Product p1 WHERE p1.deleted = false AND EXISTS (SELECT p FROM Product p INNER JOIN p.tags t WHERE p1.id = p.id GROUP BY p.id HAVING SUM(CASE WHEN t.id IN ?1 THEN 1 ELSE 0 END) >= ?2)")
int countByTags(List<Long> tagIds, long length);