繁体   English   中英

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

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

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

在 ProductRepository 中,我想包含一个方法,该方法采用部分名称和 Category 列表作为参数,并返回包含给定名称和参数列表中任何类别的所有产品。 我的问题是:是否可以在 @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 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM