如何使用spring-data-jpa 2.1实现长/复杂查询

时间:2019-02-06 23:16:15

标签: java spring hibernate spring-boot spring-data-jpa

在实现spring jpa查询时,我需要一些建议。由于输入长度,我的查询很复杂。 作为输入,我有: 15条件-检查相等性是否不为null; 2个条件-检查是否为空
另外,输出必须可分页。

我知道可以通过使用标准的PagingAndSortingRepository来解决此问题,例如:

Page<A> findAllByParam1AndParam2AndParam3Between...(@Nullable String param1, @Nullable String param2, @Nullable Integer param3,...) 

但是,看这个解决方案输入了多长时间似乎还不清楚,我也不认为带有这么多参数的方法是好的解决方案。 我也在考虑通过示例找到findAll,但这是在支持平等,而不是在beteen条件。

还有其他选择吗?唯一的方法是使用CriteriaBuilder构建自定义查询?

2 个答案:

答案 0 :(得分:1)

您可以通过以下选项进行操作。 1)使用hql,因为必须将所有表映射为jpa实体 2)是使用本机查询,这里的缺点是它会影响应用程序的可移植性,但是如果您确定应用程序不会在任何其他数据库上迁移,则可以使用此功能 3)是使用criteriabuilder

编辑->发现我们可以将@Query用于SQL和JPQL来执行。

请点击以下链接以获取更多信息

https://www.baeldung.com/spring-data-jpa-query

一些Spring开发人员认证书中的Query用法。

希望有帮助

答案 1 :(得分:1)

派生的查询(即从方法名派生实际查询的查询)对于此类冗长或复杂的查询是错误的工具,因为结果名称变得无法使用。

您应该考虑的替代方法