首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Spring存储库通过多个字段过滤实体?

如何使用Spring存储库通过多个字段过滤实体?
EN

Stack Overflow用户
提问于 2020-09-16 11:40:01
回答 4查看 17.4K关注 0票数 8

我写的后端租赁平面网络应用程序,我不知道如何过滤从数据库(例如。提供客房、床、地板或城市)。所以我有10个字段,所以用户可以在一次搜索中选择所有字段来过滤平面图,我只想在一个方法中将所有字段放入JPA存储库,但是当我只使用其中的5个字段时,我无法添加更多的fields.When,我开始输入更多的NumberOfRooms --例如,它只是冻结了,然后通过键入每个字母也冻结了。

1.搜索(过滤)字段是否有任何限制?

2.另一种方法是什么?(我想把所有内容放在一个方法中,并在控制器中检查用户是否使用了所有过滤器,检查每个字段是否为空)

代码语言:javascript
运行
复制
List<Flat> findAllByPriceBetweenAndCityAndRentORbuyAndUtilitiesBetweenAndNumberOfBedsBetweenAndNum(FastMoney less,FastMoney greater,String city,Boolean rentORbuy,int util1,int util2,int num1,int num2);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-09-16 11:53:28

在这里,由于用户并不总是提供所有字段,所以需要使用更多的动态查询。我推荐规范作为实现这一目标的最佳方法。

您可以在官方文档中找到更多信息:https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

票数 10
EN

Stack Overflow用户

发布于 2020-09-16 13:56:48

88-字符查询方法?求你了,不要!

当您可以使用Text Blocks编写格式良好的多行JPQL查询时,为什么要编写一个不可能解析的88个字符的方法呢?

针对Spring数据仓库的自定义实现进行了拯救!

如果要动态构建查询,请使用标准API。您甚至可以从类型安全的Metamodel中获益。

所以,你需要做的是:

  1. 转到Spring数据手册中的Spring数据仓库的自定义实现部分,并查看如何创建自定义存储库,您将在其中添加findFlats方法。
  2. 在新的findFlats方法中,使用Criteria动态构建查询。

就这样!

票数 15
EN

Stack Overflow用户

发布于 2020-09-16 11:59:34

也许,为了提高可读性,我建议创建一个自定义查询,而不是有一个无穷尽名称的"find“方法(即使它是受支持的)。此外,如果希望加快性能,甚至可以从查询中填充DTO,以避免从Jpa实体到DTO的映射(基本上我建议使用投影)

检查一下如何在这里做https://vladmihalcea.com/the-best-way-to-map-a-projection-query-to-a-dto-with-jpa-and-hibernate/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63919278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档