在实现spring jpa查询时,我需要一些建议。由于输入长度,我的查询很复杂。
作为输入,我有:
15条件-检查相等性是否不为null;
2个条件-检查是否为空
另外,输出必须可分页。
我知道可以通过使用标准的PagingAndSortingRepository来解决此问题,例如:
Page<A> findAllByParam1AndParam2AndParam3Between...(@Nullable String param1, @Nullable String param2, @Nullable Integer param3,...)
但是,看这个解决方案输入了多长时间似乎还不清楚,我也不认为带有这么多参数的方法是好的解决方案。 我也在考虑通过示例找到findAll,但这是在支持平等,而不是在beteen条件。
还有其他选择吗?唯一的方法是使用CriteriaBuilder构建自定义查询?
答案 0 :(得分:1)
您可以通过以下选项进行操作。 1)使用hql,因为必须将所有表映射为jpa实体 2)是使用本机查询,这里的缺点是它会影响应用程序的可移植性,但是如果您确定应用程序不会在任何其他数据库上迁移,则可以使用此功能 3)是使用criteriabuilder
编辑->发现我们可以将@Query用于SQL和JPQL来执行。
请点击以下链接以获取更多信息
https://www.baeldung.com/spring-data-jpa-query
一些Spring开发人员认证书中的Query用法。
希望有帮助
答案 1 :(得分:1)
派生的查询(即从方法名派生实际查询的查询)对于此类冗长或复杂的查询是错误的工具,因为结果名称变得无法使用。
您应该考虑的替代方法
使用@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/