HQL不会使用空字段提取结果

时间:2015-12-09 11:51:17

标签: java hibernate hql entitymanager

我想使用HQL从表中检索所有元组,即使包含空字段也是如此。逻辑解释如下:

“如果某个特定字段为null,则返回元组,相反,如果它不为null,请检查查询的'where'子句。”

我试着写这样的查询,但实际上它不起作用。

String query ="FROM Audit t WHERE (t.emp IS NULL OR t.emp.name LIKE '%')";
listaServer = entityManager.createQuery(query).getResultList();

这是审核表

| ID | EMP    | STATE  |
***********************
|  1 | 150    | Active |
|  2 | (null) | Active |

这是Emp表

| ID | Name  |
**************
|150 | Tom   |
|151 | John  |

当我运行查询时,它只返回Audit表的第一个元组。我该如何解决?

2 个答案:

答案 0 :(得分:0)

我认为你没有必需的HQL。我认为当实体之间存在关联时,您将需要内部联接。所以我建议在下面查询

select a from Audit a join a.emp e where e is not null  OR emp.name LIKE '%'

应该是什么样的

String query ="select a from Audit a join a.emp e where e is not null  OR emp.name LIKE '%'";
listaServer = entityManager.createQuery(query).getResultList();

答案 1 :(得分:-1)

在我看来,这是因为这个表达式:t.emp.name LIKE '%' 为了评估这个表达式,hibernate将生成一个内连接。 您应该尝试在表之间定义左外连接,并在该范围内运行select。 像这样:

SELECT t from Audit t LEFT JOIN t.emps e WHERE (t.emp IS NULL OR e.name LIKE '%')