Spring Data JPA使用SpEL语法有条件地构建查询

时间:2018-10-09 13:31:45

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

我试图根据布尔@Param来构建查询,而困难之处在于我没有使用经典运算符(=,<,> ...)来构建查询的结尾。

在此示例中,假设我要获取所有与Account对象无关的Sales对象(如果我在@Param中传递false)或与Account相关(如果我在@Param中传递true) ):

@Query("SELECT sale .... 
 WHERE sale.account :#{isbound ? NOT NULL : IS NULL}")
public List<Sale> getSales(@Param("isbound") boolean isBound);

我尝试了一些基于Spring官方文档(https://spring.io/blog/2014/07/15/spel-support-in-spring-data-jpa-query-definitions)的语法,但是它们的所有示例都在表达式之前使用了运算符,例如:entity =#{the_expression}。

有人曾经尝试过这个并且可以给我写这个的好方法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

像下面这样重构查询代码:

@Query("SELECT sale .... 
        WHERE (true = :isbound and sale.account is not null)
          or (false = :isbound and sale.account is null)")
public List<Sale> getSales(@Param("isbound") boolean isBound);