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

Spring Data JPA Use SpEL syntax to conditionally build query

我尝试根据布尔值 @Param 构建查询,困难在于我在不使用经典运算符(=、<、> ...)的情况下构建查询的结尾。

例如,假设我想获取与帐户对象无关(如果我在@Param 中传递 false)或与帐户相关(如果我在@Param) :

@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}.

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

重构您的查询代码,如下所示:

@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);