通过运行时生成的jpql查询提供@Query

时间:2017-07-04 22:32:28

标签: java spring-data jpql

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

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

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

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

1 个答案:

答案 0 :(得分:0)

  

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

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

  

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

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

当然,你可以将它与custom methods结合使用,如果你想做的不仅仅是规格所能提供的,那也可以节省一天。