我想使用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表的第一个元组。我该如何解决?
答案 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 '%')