Mysql 基于布尔标志param的spring boot jpa@query where子句

Mysql 基于布尔标志param的spring boot jpa@query where子句,mysql,spring-boot,spring-data-jpa,Mysql,Spring Boot,Spring Data Jpa,我使用的是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(&qu

我使用的是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);
@Query(“从testtable p中选择p,其中名称不为null”)
公共列表findRecords(@Param(“mandflag”)布尔mandflag);
编辑 需求-如果输入标志为true,则从名称不为null的表中获取数据

我需要表中的数据,其中条件应基于布尔标志执行

@Query(“从testtable p中选择p,其中CASE WHEN:mandflag=TRUE,则name不为null,否则1=1 END”,nativeQuery=TRUE)
@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);
公共列表findRecords(@Param(“mandflag”)布尔mandflag);
试试这个:

@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);
@Query(“从testtable p中选择p,其中(如果:mandflag=true,则name为noy null,否则name为null end))
公共列表findRecords(@Param(“mandflag”)布尔mandflag);

我正在努力理解您的要求。请您更清楚一点好吗?我想使用基于参数的条件执行查询。这里,如果input mandflag param为true,则我需要名称不为空或null的记录。如果input mandflag param为false,则应返回所有记录。只需编写两个方法来执行此操作,然后执行exe根据布尔值选择所需的参数。您可以简单地使用
从testtable p中选择p,其中?1=false或(?1=true且name不为null)
您甚至有一个现有的答案,但您发布了一个不正确的答案。这是不同的,请仔细查看。甚至变量名称也不同。您好,现在我收到了错误antlr.noviablealException:is antlr.noviablealException:is antlr.noviablealException:null antlr.noviableException:意外的标记:endReferences,或者关于它是什么t错误。无论如何,我编辑了asnwer,所以请检查它。