为@Query 提供运行时生成的 jpql 查询
supplying @Query with a runtime generated jpql query
我正在使用一种方法,该方法根据用户希望在从数据库中检索数据时应用的一组过滤器生成查询字符串。因此,对于每个新过滤器,该方法都会附加类似 AND variable_x = '4'
的内容。
我想使用 spring 数据的 JpaRepository
接口,我想制作一个用 @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 表达式),这基本上意味着表达式,而不是列或 table 名称,当然也不是完整的语句。
Or are there more elegant solutions that solve my problem?
是的,还有其他选择。根据您的描述 Specifications seem to fit the bill best.
当然,您可以将其与 custom methods 结合使用,如果您想做的比规范所能提供的更多,这也可以节省时间。
我正在使用一种方法,该方法根据用户希望在从数据库中检索数据时应用的一组过滤器生成查询字符串。因此,对于每个新过滤器,该方法都会附加类似 AND variable_x = '4'
的内容。
我想使用 spring 数据的 JpaRepository
接口,我想制作一个用 @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 表达式),这基本上意味着表达式,而不是列或 table 名称,当然也不是完整的语句。
Or are there more elegant solutions that solve my problem?
是的,还有其他选择。根据您的描述 Specifications seem to fit the bill best.
当然,您可以将其与 custom methods 结合使用,如果您想做的比规范所能提供的更多,这也可以节省时间。