【问题标题】:How to implement long/complex query with spring-data-jpa 2.1如何使用 spring-data-jpa 2.1 实现长/复杂查询
【发布时间】:2019-07-01 00:28:15
【问题描述】:

我需要一些关于实现 Spring JPA 查询的建议。由于输入长度,我的查询很复杂。
作为输入,我有:

  • 15 条件 - 如果不为空,则检查相等性;
  • 2 条件 - 检查是否为空
  • 此外,输出必须是可分页的。

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

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

但是看看我的输入是多久这个解决方案看起来不清楚,我不认为有这么多参数的方法是一个好的解决方案。 我也在考虑通过 Example 考虑 findAll,但这是支持平等,而不是 between 条件。

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

【问题讨论】:

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


    【解决方案1】:

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

    Edit-> 发现我们的@Query 可以同时用于 SQL 和 JPQL 来执行。

    请点击以下链接了解更多信息

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

    在一些春季开发者认证书籍中也使用了查询。

    希望有帮助

    【讨论】:

      【解决方案2】:

      派生查询,即那些从方法名称派生出实际查询的查询,对于如此长或复杂的查询来说是错误的工具,因为结果名称变得不可用。

      您应该考虑的替代方案是

      【讨论】:

        猜你喜欢
        • 2020-03-05
        • 1970-01-01
        • 2019-12-25
        • 1970-01-01
        • 2017-09-25
        • 1970-01-01
        • 2017-10-09
        • 2014-12-02
        • 1970-01-01
        相关资源
        最近更新 更多