2016-09-06 404 views
0

我预计CriteriaBuilder.equal(Expression<?> x, Object y)总是评估为假ynull,但令我惊讶,这不是什么情况发生:它的相关领域也是null(我只测试了这个字符串)行评估为true。CriteriaBuilder.equal()如何处理空值?

我唯一能找到的就是this explanation,这对应于我错误的初始假设。

这里真的发生了什么?当ynullCriteriaBuilder.equal(Expression<?> x, Object y)转换成CriteriaBuilder.isNull(Expression<?> x)?是null字符串转换为'null'?或者我有点误会?

+0

它是提供程序特定的,但EclipseLInk可以告诉您的参数为空,因此将相等检查转换为isNull检查它何时从条件查询创建表达式。如果使用参数,情况并非如此,因为表达式可能在参数传入之前就已经准备好了。 – Chris

+0

谢谢,如果您将其转换为答案,我会接受它! – oulenz

回答

2

它是提供程序特定的,但EclipseLInk可以告诉您的参数为空,因此在从条件查询创建表达式时,将相等检查转换为isNull检查。如果使用参数,则不是这种情况,因为表达式可能在传入参数前准备好。