【问题标题】:Is there a way to dynamically generate Spring Data Jpa queries?有没有办法动态生成 Spring Data Jpa 查询?
【发布时间】:2019-10-01 11:55:42
【问题描述】:

我正在使用 Spring Boot、Spring Data 编写应用程序。我正在尝试根据不同的过滤器参数实现过滤功能。

使用 Spring Data 查询我们可以定义相当复杂的逻辑,例如:

@Query("SELECT u FROM User u WHERE u.status = 1")
Collection<User> findAllActiveUsers();

但是,如果在我们发出可能非常复杂的实际过滤请求之前,where 子句的数量、顺序、限制、不同参数的数量是未知的。

现在过滤器参数被发送到一个 json 对象中,我解析并检索它们,结果 sql 查询可能是这样的:

SELECT * FROM table
WHERE field1 != `value1` and (field1 != ` value2 `OR (field1 = `value3` AND filed2 < 3))
AND field2 != 99

是否可以生成具有未定义(直到实际的过滤器请求,在运行时)数量的参数、where 子句和其他内容的动态复杂查询?

【问题讨论】:

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


    【解决方案1】:

    我将这个活动项目 RSQL 用于 JPA

    https://github.com/perplexhub/rsql-jpa-specification

    【讨论】:

      【解决方案2】:

      以前我在Spring Data JPA Query with Dynamic Where Clause 上写过一篇文章。在此示例中,您可以为此发送 Where 子句和参数映射。您可以利用它并根据您的需要对其进行修改。

      【讨论】:

        【解决方案3】:

        【讨论】:

        • 我还发现了 Spring Data Rest 之类的东西,它开箱即用地支持过滤以及所有其他似乎与我的案例相关的东西。你知道它是否值得探索吗?感谢您的回复。
        • Spring Data Rest 提供 CRUD 服务和过滤、排序等。是的,值得探索 @Coffemanz 通过使用规范,您将更好地控制查询的形成方式,如连接、实体图等如果没有不管是简单的表结构,都可以使用 Spring Data Rest
        【解决方案4】:

        要以类型安全的方式构建它,您可以使用FluentJPA

        【讨论】:

          猜你喜欢
          • 2019-02-20
          • 2022-01-23
          • 2021-12-08
          • 1970-01-01
          • 2015-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-15
          相关资源
          最近更新 更多