这是因为SQLnull的特殊性。在SQL中:
NULL不等于任何值,甚至不等于NULL本身。IN操作符是基于等值比较的column IN (value1, value2, ...)实际上是column = value1 OR column = value2 OR ...的简写。因此
column IN (NULL, '')会被解释为column = NULL OR column = ''。而
column = NULL这个条件在 SQL 中永远是FALSE,因为它不能用=来判断NULL。要判断一个字段是否为NULL,必须使用IS NULL操作符。应将写法改为:
wrapperX.and(i -> i.isNull(Entity::getCol).or().eq(Entity::getCol, ""));