Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为@Query提供运行时生成的jpql查询_Java_Spring Data_Jpql - Fatal编程技术网

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

Java 为@Query提供运行时生成的jpql查询,java,spring-data,jpql,Java,Spring Data,Jpql,我正在使用一种方法,该方法根据用户从数据库检索数据时希望应用的一组过滤器生成查询字符串。因此,对于每个新过滤器,该方法都会附加类似于和变量_x='4'的内容,例如 我想使用spring数据的JpaRepository接口,我想创建一个带有@Query注释的方法,以便能够执行生成的查询。但是,@Query需要一个常量作为值。那么有没有办法让@Query执行这个生成的查询呢?比如说,像这样的东西能起作用吗?我可以将整个JPQL查询作为参数提供给@query @Query("?1") public a

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

我想使用spring数据的
JpaRepository
接口,我想创建一个带有
@Query
注释的方法,以便能够执行生成的查询。但是,
@Query
需要一个常量作为值。那么有没有办法让
@Query
执行这个生成的查询呢?比如说,像这样的东西能起作用吗?我可以将整个JPQL查询作为参数提供给
@query

@Query("?1")
public abstract void executeRuntimeGeneratedQuery(String query);
还是有更优雅的解决方案来解决我的问题

我可以将整个JPQL查询作为参数提供给
@query

@Query("?1")
public abstract void executeRuntimeGeneratedQuery(String query);
不,这是不可能的
@Query
注释是一个静态的东西,您只能使用JPA支持的参数(包括SpEL表达式),这基本上意味着表达式,而不是列或表名,当然也不是完整的语句

还是有更优雅的解决方案来解决我的问题

是的,还有其他选择。根据你的描述

当然,如果您想做比规范所能提供的更多的事情,您可以将其与规范结合起来,这样也可以节省时间

我可以将整个JPQL查询作为参数提供给
@query

@Query("?1")
public abstract void executeRuntimeGeneratedQuery(String query);
不,这是不可能的
@Query
注释是一个静态的东西,您只能使用JPA支持的参数(包括SpEL表达式),这基本上意味着表达式,而不是列或表名,当然也不是完整的语句

还是有更优雅的解决方案来解决我的问题

是的,还有其他选择。根据你的描述


当然,如果您想做比规范所能提供的更多的事情,您可以将其与规范结合起来,这样也可以节省时间。

您必须使用QueryDSL或规范来处理带条件的Spring数据。检查这个或如何做。对于可以使用的更简单的条件,必须使用QueryDSL或规范来使用带条件的Spring数据。检查这个或如何做。对于更简单的情况,您可以使用规范示例,其中包含一个严重错误LocalDate=new LocalDate().minusYears(2);我不可能。应该是LocalDate.now().minusYears(2),因为LocalDate有一个私有构造函数。但是感谢链接。规范示例包含一个严重错误LocalDate=new LocalDate()。minusYears(2);我不可能。应该是LocalDate.now().minusYears(2),因为LocalDate有一个私有构造函数。但是谢谢你的链接。