JPQL/SQL查询:'%'包含空值

gip*_*ani 2 mysql sql database hibernate jpql

我有一个简单的JPQL查询.(但这也适用于sql查询..)

FROM DomainObj d where d.field1 like 'TEST%' and d.field2 like '%';
Run Code Online (Sandbox Code Playgroud)

如果DB包含以下行:

1)field1 - >'TEST'; field2 - > null

查询什么都没回复!

如果DB包含以下值:

2)提交1 - >'测试'; field2 - >''

查询返回行!

如何在搜索类似'%'的同时包含空值,使查询尽可能简单(避免和/或子句?)

我正在实现在数据库中搜索实体的功能..我也同时搜索许多字段..

谢谢Marco

Mar*_*c B 8

你不能在相等测试中直接使用null,因为null与所有东西都不相等,包括它自己.这就是is null测试的原因,例如:

select null = null -> null
select null <> null -> null
select 1 = null -> null
select 1 <> null -> null
select 1 + null -> null
Run Code Online (Sandbox Code Playgroud)

基本上为null是具有传染性的,并且会使与其比较或添加的任何内容无效.

所以,是的,你必须这样做

SELECT ... WHERE somefield LIKE '%...%' or somefield IS NULL
Run Code Online (Sandbox Code Playgroud)