2016-09-06 166 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檢查。如果使用參數,則不是這種情況,因爲表達式可能在傳入參數前準備好。