【问题标题】:Spring Data JPA Use SpEL syntax to conditionally build querySpring Data JPA 使用 SpEL 语法有条件地构建查询
【发布时间】:2019-03-14 07:25:47
【问题描述】:

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

例如,假设我想获取与 Account 对象无关(如果我在 @Param 中传递 false)或与 Account 相关的所有 Sales 对象(如果我在 @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}。

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

【问题讨论】:

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


    【解决方案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);
    

    【讨论】:

    • 好吧!!这是一个很好的解决方法,昨天我的大脑卡在了 SpEL 语法上,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2019-02-05
    相关资源
    最近更新 更多