【发布时间】:2017-12-03 07:46:58
【问题描述】:
我正在尝试编写一个适用于 Oracle、MySQL 或 SQL Server 的 JPQL 查询。它应该找到字符串字段不为空或为空的所有项目。在 MySQL 上,
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 中。有人找到解决方法吗?
【问题讨论】:
-
为什么不使用变量让 JPA 处理呢?
.... x.foo != :emptyString ...和query.setParameter("emptyString","")之类的东西? -
Thomas 的想法很有趣,我不认为这会产生任何影响,但既然你提到了它,它看起来绝对值得一试。谢谢。
-
恐怕没有帮助。不过还是谢谢。