多对多 JPQL @Query with List 作为 Spring 中的参数

Many to many JPQL @Query with List as argument in Spring

我有一个简单的 Product-Category 多对多关系,其中 Product 有一个 List "categories" 属性,Category 有一个 List "products" 属性. JPA ORM 映射非常好并且可以工作。

在 ProductRepository 中,我想包含一个以部分名称和类别列表作为参数的方法,以及 returns 所有包含给定名称和 any 的产品参数列表中的类别。我的问题是:是否可以在@Query 中指定我的查询?怎么样?

@Repository
public interface ProductRepository extends JpaRepository<Product, Integer> {

    @Query("SELECT obj FROM Product obj WHERE obj.name LIKE %?1 AND obj.categories ?????")
    List<Product> findByNameCategories(String name, List<Category> categorias);
}

你快到了。您可以精心设计查询来执行您想要的操作,而无需使用 @Query 注释

List<Product> findByNameStartingWithAndCategoriesIn(String name, Set<Category> categorias);

对于不同的结果:

Set<Product> findDistinctByNameStartingWithAndCategoriesIn(String name, Set<Category> categorias);

Spring 会自动为您创建正确的查询。您还可以 EndingWith 包装以 % 结尾的参数或 Containing 使参数在两边都用 %

包装

我将您的 List<Category> categorias 更改为 Set,因为列表可以在列表中包含重复的 Category 对象,而 Set 不会,因此当它在幕后制作查询时,您将在 In 子句中拥有唯一的 ID .

Spring Documentation on crafting queries