当前位置: 首页 > 知识库问答 >
问题:

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

吴经略
2023-03-14

我试图根据布尔@Param构建一个查询,困难在于我构建查询的结尾时没有使用经典运算符(=,

例如,假设我想获取与Account对象无关的所有销售对象(如果我在@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个答案

潘高洁
2023-03-14

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

@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);
 类似资料:
  • 我知道不是一个有效的阶段,但我只是想说明我试图完成什么,即只有在提供选项时才构建fat jar的条件安装。

  • 我有一个相当复杂的Jenkins工作,它构建,单元测试和打包Web应用程序。根据情况,一旦这项工作完成,我想做不同的事情。我还没有找到一种可重用/可维护的方法来做到这一点。真的是这样还是我错过了什么? 完成复杂的工作后,我希望拥有的选项: > 什么都不做 启动我的低风险变更构建管道: < li >将我的WAR文件复制到我的工件库 < li >部署到生产环境中 启动我的高风险变更构建管道: 将我的W

  • 您好,我有一个名为a的项目,包含三个模块(核心、移动网络),结构如下: My settings.gradle类似于: 现在已经有了不同的版本,在版本2.0之前,我们提供移动模块,在此之前,我们不想构建“移动”模块。现在我有了1.0、1.1、1.2、2.0、2.1版本,我们在每次提交代码之前测试和检查编译。我们是这样做的: 这样,在2.0之前的版本中,它仍然会构建“移动”模块,这当然会失败。我的问题

  • 问题内容: 任何使用条件/ hql / sql告诉我查询的人。要求是用户输入电子邮件或用户名查询从表user返回用户的密码。 问题答案: 如果您正在做的只是获取一个字段,那么您可能只想执行hql(或者可能是sql)。 如果您符合条件,我相信您将撤回整个对象,只是为了最终使用一个字段。 编辑: 这是一个非常广泛的问题。这是一个教程

  • SpringDataJpa中 Specification怎样使用in查询 实体类Menu.java如下 想通过roles属性做in查询,代码如下 错误如下: Parameter value [com.appmtce.pojo.entity.role.Role@20f81e2a] did not match expected type [java.util.Collection (n/a)] 我的S

  • 我试图翻译这个(简化)代码使用Java-8流: 以下是我尝试过的: 但以上给出了所有