java - 为 @Query 提供运行时生成的 jpql 查询

标签 java spring-data jpql

我正在使用一种方法,该方法根据用户在从数据库检索数据时想要应用的一组过滤器生成查询字符串。因此,对于每个新过滤器,该方法都会附加类似 AND variable_x = '4' 的内容。

我想使用Spring Data的JpaRepository接口(interface),并且我想创建一个用@Query注释的方法来执行这个生成的查询。但是,@Query 需要一个常量作为值。那么有没有办法让 @Query 执行这个生成的查询呢?例如,这样的事情可以工作吗?我可以将整个 JPQL 查询作为参数提供给 @Query 吗?

@Query("?1")
public abstract void executeRuntimeGeneratedQuery(String query);

或者有更优雅的解决方案可以解决我的问题吗?

最佳答案

Can I give the entire JPQL query as a parameter to @Query?

不,这是不可能的。 @Query 注释是静态的,您只能使用 JPA 支持的参数(包括 SpEL 表达式),这基本上意味着表达式,而不是列或表名称,当然也不是完整的语句。

Or are there more elegant solutions that solve my problem?

是的,还有其他选择。根据您的描述Specifications seem to fit the bill best .

当然,您可以将其与custom methods结合起来。如果您想做的事情超出了规范所能提供的范围,这也将节省您的时间。

关于java - 为 @Query 提供运行时生成的 jpql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44914742/

相关文章:

JAVA: NamedQuery 字符串问题

java - 我应该查看 java 编译器生成的字节码吗?

java - JPA2 - 如何在 OpenJPA 中的 Join 中按嵌入复合主键中的字段进行排序

java - java将数据写入Excel工作表

java - Elasticsearch-忽略持久化的属性

jpa - JPA 中的 ORDER BY "CASE column"

java - 左连接两个与 JPQL 无关的表

java - Android 开发人员 - 应用程序停止工作,代码中没有错误

java - 无法在 spring-data 中写入正确的请求

java - Spring 数据和 hibernate 比存储过程更快