多对多 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 .
我有一个简单的 Product-Category 多对多关系,其中 Product 有一个 List
在 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 .