我希望CriteriaBuilder.equal(Expression<?> x, Object y)
在y
为null
时始终评估为false,但令我惊讶的是,并非发生了什么:对于相关的行,它的计算结果为true字段也是null
(我只测试过字符串)。
我唯一能找到的就是this explanation,这与我错误的初步假设相对应。
这里到底发生了什么?当CriteriaBuilder.equal(Expression<?> x, Object y)
为CriteriaBuilder.isNull(Expression<?> x)
时,y
会转换为null
吗? null
字符串是否已转换为'null'
?或者我在某种程度上是错误的?
答案 0 :(得分:2)
它是特定于提供者的,但EclipseLInk可以告诉您的参数为null,因此在从条件查询创建表达式时将等同性检查转换为isNull检查。如果使用参数,则不是这种情况,因为可以在传入参数之前准备表达式。