Java 如何做一个;findByCategory“;在Spring JPA存储库类中的多产品模式中?
我是JavaSpring框架的新手,我知道这个标题听起来太具体了,但是这个问题的答案对于任何类似的多对多模式都很有用。我找了很多这个答案,但一个也没有找到请:在否决投票前阅读全文或与其他问题相关 我有实体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以列出
产品
和类别
,它们是多对多
相关的,并在运行时生成
在我的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)