Java 如何做一个;findByCategory“;在Spring JPA存储库类中的多产品模式中?

Java 如何做一个;findByCategory“;在Spring JPA存储库类中的多产品模式中?,java,spring-boot,spring-data,many-to-many,Java,Spring Boot,Spring Data,Many To Many,我是JavaSpring框架的新手,我知道这个标题听起来太具体了,但是这个问题的答案对于任何类似的多对多模式都很有用。我找了很多这个答案,但一个也没有找到请:在否决投票前阅读全文或与其他问题相关 我有实体产品和类别,它们是多对多相关的,并在运行时生成 在我的REST应用程序中,我有三个使用该模式的重要端点: /category以菜单形式列出所有类别 /products?description=在description字段中列出按术语过滤的产品 /category/{id}/products以列出

我是JavaSpring框架的新手,我知道这个标题听起来太具体了,但是这个问题的答案对于任何类似的多对多模式都很有用。我找了很多这个答案,但一个也没有找到请:在否决投票前阅读全文或与其他问题相关

我有实体
产品
类别
,它们是
多对多
相关的,并在
运行时生成

在我的
REST
应用程序中,我有三个使用该模式的重要
端点:

  • /category
    以菜单形式列出所有类别
  • /products?description=
    在description字段中列出按术语过滤的产品
  • /category/{id}/products
    以列出此类别中的产品
  • 最后一个问题很难解决,因为有人告诉我应该使用
    @Query
    注释创建
    连接
    where
    来完成工作。但我相信Spring JPA工程师不能将这项如此普通的任务排除在JPA之外

    第二个端点在其存储库中有此方法:

    public Page<Produto> findByDescriptionIgnoreCaseContainingOrderByDescriptionAsc(String description, Pageable pageOptions);
    
    公共页面findBydescriptionIgnoreCaseCainingOrderByDescriptionAsc(字符串描述,可分页页面选项);
    
    我被告知的最后一个终点应该是:

    @Query("select * from products p left join p.category c where c = ?1")
    public List<Produto> findByOrderByDescriptionAsc(Lond idCategory)
    
    @Query(“从产品中选择*p左连接p.c类,其中c=?1”)
    公共列表findByOrderByDescriptionAsc(Lond-idCategory)
    


    我是否可以作为
    listByCategory(仅获取一个类别的方法)执行此搜索,而不必使用
    @Query
    注释?如果是,如何获取所有产品bu类别ID

    List<Product> findByCategoriesIdOrderByDescriptionAsc(long categoryId)
    

    你说的一种只获取一个类别的方法是什么?它可能是第一个吗?我的意思是一个产品的类别和用户所说的一样多。因此,我需要存储库来查找URL/category/id/products中传递的category id中的产品。因此,与其在
    findByOrderByDescriptionAsc
    上使用
    @Query
    ,不如使用
    findbydescriptionignorecaseingordberbydescriptionasc
    这样的查询方法,您还可以尝试
    public>List findByCategoryId(Lond id)
    public List findByCategory(Category)
    @AbdullahKhan您的第一条评论引用了第二个端点,这很好。我的问题是findByCategory的第三个也是最后一个端点。我将尝试您的第二条评论,看看它是否有效。谢谢Tipu,您的回答已被Spring存储库引擎接受。这种方法存在一个问题:结果查询没有使用
    join
    ,而只是添加了所有三个表。非常不完善。请发布实体并从日志中选择查询。在我的例子中,它是添加join
    Product findFirstByCategoriesIdOrderByDescriptionAsc(long categoryId)