spring数据动态地组成@query查询

时间:2017-07-09 10:40:47

标签: java spring spring-data spring-data-jpa jpql

我的情况是我必须在某种方法中编写JPQL查询,然后将此查询传递给spring数据查询方法,以用作@Query注释中的查询

@Query(value = ":DyanamicQuery")
List<PrizeInsuranceConfiguration> filterConfigurPrizeInsurance(String DyanamicQuery);

或至少是条件部分

@Query(value = "SELECT c FROM PrizeInsuranceConfiguration c WHERE  :DyanamicConditions")
List<PrizeInsuranceConfiguration> filterConfigurPrizeInsurance(String DyanamicConditions);

2 个答案:

答案 0 :(得分:1)

那么,你可以做到。为什么不这样做有两个原因:

  1. sql注入(spring数据使用预处理语句);
  2. (第一个reasone的结果)spring数据创建查询树并绑定所有参数
  3. 但如果您需要动态查询,可以使用SpecificationsQuery by ExampleQuerydsl

答案 1 :(得分:0)

通过使用自定义Spring Data存储库并使用Antlr4与CriteriaBuilder创建where子句,我可以实现从SQL注入保存动态的where子句。 基本上,我为我支持的where子句定义了一个语法,然后使用Antlr4访问者浏览该语法并初始化谓词。