我需要一些关于实现 spring JPA 查询的建议。由于输入长度,我的查询很复杂。
作为我的输入:
- 15 条件 - 如果不为空则检查是否相等;
- 2 条件 - 检查 if not null
- 此外,输出必须是可分页的。
我知道这可以通过使用标准的 PagingAndSortingRepository 来解决,例如:
Page<A> findAllByParam1AndParam2AndParam3Between...(@Nullable String param1, @Nullable String param2, @Nullable Integer param3,...)
但是看看我输入的这个解决方案有多长看起来不清楚,我不认为具有这么多参数的方法是一个好的解决方案。
我也在考虑 findAll
by Example,但这是支持相等性,而不是 between 条件。
还有其他选择吗?
唯一的方法是使用 CriteriaBuilder?
最佳答案
派生查询,即那些从方法名称派生实际查询的查询,对于如此长或复杂的查询来说是错误的工具,因为生成的名称变得不可用。
您应该考虑的替代方案是
使用
@Query
注释中提供的固定查询:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.at-query使用命名查询,您可以在其中提供对实体的查询:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.named-queries
使用动态组合 where 子句的规范:https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/
关于java - 如何使用 spring-data-jpa 2.1 实现长/复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54564017/