我写的后端租赁平面网络应用程序,我不知道如何过滤从数据库(例如。提供客房、床、地板或城市)。所以我有10个字段,所以用户可以在一次搜索中选择所有字段来过滤平面图,我只想在一个方法中将所有字段放入JPA存储库,但是当我只使用其中的5个字段时,我无法添加更多的fields.When,我开始输入更多的NumberOfRooms --例如,它只是冻结了,然后通过键入每个字母也冻结了。
1.搜索(过滤)字段是否有任何限制?
2.另一种方法是什么?(我想把所有内容放在一个方法中,并在控制器中检查用户是否使用了所有过滤器,检查每个字段是否为空)
List<Flat> findAllByPriceBetweenAndCityAndRentORbuyAndUtilitiesBetweenAndNumberOfBedsBetweenAndNum(FastMoney less,FastMoney greater,String city,Boolean rentORbuy,int util1,int util2,int num1,int num2);
发布于 2020-09-16 11:53:28
在这里,由于用户并不总是提供所有字段,所以需要使用更多的动态查询。我推荐规范作为实现这一目标的最佳方法。
您可以在官方文档中找到更多信息:https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/
发布于 2020-09-16 13:56:48
88-字符查询方法?求你了,不要!
当您可以使用Text Blocks
编写格式良好的多行JPQL查询时,为什么要编写一个不可能解析的88个字符的方法呢?
针对Spring数据仓库的自定义实现进行了拯救!
如果要动态构建查询,请使用标准API。您甚至可以从类型安全的Metamodel
中获益。
所以,你需要做的是:
findFlats
方法。findFlats
方法中,使用Criteria动态构建查询。就这样!
发布于 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/
https://stackoverflow.com/questions/63919278
复制相似问题