我正在使用JPA EntityManager + Hiberate,其中出现了一个神秘的where子句。 Hibernate的调试基本上显示:
select /* bunch of columns */
from some_table
where /* several filters */
and 0=1
运行
javax.persistence.Query.getResultList
时会发生这种情况。 Query
在where子句中有一个Predicates
数组,但是请放心0 = 1
不是其中之一。我找不到在查询中包含
0=1
部分的可能原因。有任何想法吗?我会先搜索答案,但搜索引擎会忽略=
。
最佳答案
这就是将析取关系转换为SQL的方式。请参见javadoc for disjunction()
创建一个析取(零个析取)。析取值为零的析取是错误的。
因此,当创建空析取符时,它仅包含子句1 = 0
(false)。将其他谓词添加到析取关系时,它们仅添加到以or
分隔的初始(假)谓词中:
where 1 = 0 or ...
如果使用连词,它将被转换为
where 1 = 1 and ...
关于hibernate - Hibernate(或EntityManager?)添加“where 0 = 1”进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16973019/