【问题标题】:spring boot jpa @query where clause based on boolean flag paramspring boot jpa @query where 子句基于布尔标志参数
【发布时间】:2021-03-02 10:47:16
【问题描述】:

我使用的是 Spring Boot 2.4.0 版。

我需要从 name 不为 null 的表中获取数据,但它应该基于 mandflag 有条件,如果 mandflag=true 那么只有 name 不为 null 应该被执行。 请建议如何在下面的查询中添加这个基于标志的条件。

@Query("SELECT p FROM testtable p WHERE name is not null  ")
public List<PatientEntity> findRecords(@Param("mandflag") boolean mandflag);

编辑 要求 - 如果输入标志为真,则从名称不为空的表中获取数据

我需要根据布尔标志执行条件的表中的数据

【问题讨论】:

  • 我很难理解你在问什么。能不能说的更清楚一点?
  • 我想根据参数执行条件查询。在这里,如果输入 mandflag 参数为真,那么我需要名称不为空或 null 的记录,如果输入 mandflag 参数为假,则应返回所有记录
  • 只需编写 2 个方法来执行此操作并根据布尔值执行所需的一个。
  • 你可以简单地使用select p from testtable p where ?1=false OR (?1=true and name is not null)

标签: mysql spring-boot spring-data-jpa


【解决方案1】:
@Query("SELECT p FROM testtable p WHERE CASE WHEN :mandflag= TRUE THEN name is not null ELSE 1=1 END", nativeQuery = true)
public List<PatientEntity> findRecords(@Param("mandflag") boolean mandflag);

【讨论】:

  • 嗨,现在我收到错误 antlr.NoViableAltException:意外令牌:是 antlr.NoViableAltException:意外令牌:null antlr.NoViableAltException:意外令牌:结束
  • 参考 herehere 以了解该错误是什么。无论如何,我编辑了答案,所以请检查一下。
【解决方案2】:

试试这个:

@Query("SELECT p FROM testtable p WHERE (case when :mandflag = true then name is noy null else name is null end ))
public List<PatientEntity> findRecords(@Param("mandflag") boolean mandflag);

【讨论】:

  • 你甚至有一个现有的答案,但你发布了一个不正确的答案
  • 不一样,仔细看。甚至变量名都不一样。
猜你喜欢
  • 2020-10-14
  • 2015-09-20
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
相关资源
最近更新 更多