2017-08-23 90 views
1

這JPA查詢Java的JPA查詢忽略記錄,其中一個搜索字段爲空

@Query("SELECT e FROM MyEntity e WHERE (e.field1 IN :collectionOfField1s AND TRIM(LOWER(e.status)) <> 'deleted')") 

應該返回那裏e.field1中的所有記錄:collectionOfField1s和e.status <>「刪除」不如預期,但不幸的是,它沒有返回記錄,其中e.status仍然是null(尚未填充)。我想知道我需要更改什麼,以便它返回e.field1 IN:collectionOfField1s和e.status <>'deleted'的所有記錄,包括e.status爲null的所有記錄。

我欣賞這方面的任何幫助。

謝謝

回答

1

空是在數據庫中一個非常特殊的事情,你需要把它在一個differente方式。你至少有兩種方法來實現你想要的。首先是指定NULL是一個預期值,如下:

SELECT e 
    FROM MyEntity e 
WHERE e.field1 IN :collectionOfField1s 
    AND (e.status IS NULL OR TRIM(LOWER(e.status)) <> 'deleted') 

另一種方法是使用一種稱爲聚結的特殊功能,如下圖所示:如果一個空值

SELECT e 
    FROM MyEntity e 
WHERE e.field1 IN :collectionOfField1s 
    AND (TRIM(LOWER(COALESCE(e.status, 'deleted'))) <> 'deleted') 

在這種情況下,被發現,應該假定'已刪除'的值。

+0

第三種方式,如果這是一個MySQL數據庫,則使用'與'運算符不同:'TRIM(LOWER(e.status))<=>'deleted'' –

+0

謝謝您的回覆。我很感激。我在你的回覆中使用了第一種方法,它工作。 – jscriptor

相關問題