2017-06-29 53 views
0

我正在嘗試編寫能夠在Oracle,MySQL或SQL Server上工作的JPQL查詢。它應該找到所有的字符串字段不爲空或空的項目。在MySQL上,使用Oracle數據庫處理JPQL中的空字符串

select x from Examples x where (x.foo != '' and x.foo IS NOT null) 

工作正常。但是,由於Oracle將空字符串轉換爲null的方式,所以!=''位始終返回false,因此即使幾乎沒有任何字符串爲空,我也不會得到任何結果。我可以檢測到用戶正在使用什麼類型的數據庫,併爲每個數據庫寫入不同的內容,但擁有JPQL三倍的數據並不是很好。有沒有辦法處理JPQL中的空字符串,它也適用於Oracle?

我可以找到很多相關的問題,像這樣的:

null vs empty string in Oracle

Why does Oracle 9i treat an empty string as NULL?

https://dba.stackexchange.com/questions/49744/oracle-empty-string-converts-to-null

但沒有真正做什麼吧,尤其是在JPQL。任何人都找到了解決辦法?

+0

你爲什麼不使用一個變量,讓JPA處理這個問題?就像'.... x.foo!=:emptyString ...'和'query.setParameter(「emptyString」,「」)''? – Thomas

+0

這是一個有趣的想法托馬斯,我不會想到這會有所作爲,但現在你提到它,它絕對看起來值得一試。謝謝。 – Juniper83

+0

恐怕沒有幫助。不過謝謝。 – Juniper83

回答

0

這是一個有點髒的解決方案,而是組成:

x.foo != '' 

你可以使用:

length(x.foo || ' ') > 1 
+0

你是對的,它不漂亮,但它的工作原理。 – Juniper83