检查Spring数据jpa@query的IN子句参数是否为Null和空?

检查Spring数据jpa@query的IN子句参数是否为Null和空?,spring,spring-boot,sql-server-2012,spring-data-jpa,spring-data,Spring,Spring Boot,Sql Server 2012,Spring Data Jpa,Spring Data,基于某些搜索条件从db获取数据的Spring数据JPA代码不起作用。我的数据库是SQL Server 2012,同样的查询似乎适用于MYSQL数据库 代码示例: @Query(value = "select * from entity e where e.emp_id=:#{#mySearchCriteria.empId} and ((:#{#mySearchCriteria.deptIds} is null or :#{#mySearchCriteria.deptIds} ='') or e.

基于某些搜索条件从db获取数据的Spring数据JPA代码不起作用。我的数据库是SQL Server 2012,同样的查询似乎适用于MYSQL数据库

代码示例:

@Query(value = "select * from entity e where e.emp_id=:#{#mySearchCriteria.empId} and ((:#{#mySearchCriteria.deptIds} is null or :#{#mySearchCriteria.deptIds} ='') or e.dept_id in (:#{#mySearchCriteria.deptIds})) ", nativeQuery = true)
public List<Entity> search(@Param("mySearchCriteria") MySearchCriteria mySearchCriteria);
如果list mySearchCriteria.deptIds有多个值-它不起作用,实际上是将其转换为错误的查询。有线索吗?提前谢谢


注意:DEPTID的数据类型是整数列表,因为{mySearchCriteria.deptID}的值是逗号分隔的列表,例如'Value1','Value2',因此查询被转换为'Value1','Value2'为空,这会导致此错误


需要验证列表是否为空,然后更改带IN子句的查询和不带IN子句的查询。

用括号括住列表。这对我有用

(:#{#mySearchCriteria.deptIds}) is null

它会产生什么错误消息?mySearchCriteria.deptIds字段的类型是什么?@Woworks它实际上是整数列表,错误日志显示-结果未转换为布尔值日志中的确切错误消息是:消息:在预期条件的上下文中指定的非布尔类型的表达式,靠近“,”。不能用一个查询完成吗?如果列表本身为null或为空,mysql也会被处理,它是否特定于SQL Server 2012而不被处理?不特定于SQL Server。请参考,我的问题是,当我使用相同的代码库连接到MySql DB时,没有对列表对象和不同的MySql连接器进行空检查,它是有效的,我的意思是如果列表为空,它不会将其添加到查询中,但是如果我将dialact、连接器和DB更改为MSSQL server,它将其添加到查询中,而我的查询结果为空结果集。我不明白。。我想您会收到一条错误消息,它是在预期条件的上下文中指定的非布尔类型的表达式,靠近','。你是说同一个查询在MySQL和MsSQL中的工作方式不同?是的,你是对的。我的应用程序可以很好地使用mysql,我正在迁移到sql server,所以现在一些查询失败了