我正在使用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
部分的可能原因。有任何想法吗?我会首先搜索答案,但搜索引擎会忽略=
。
答案 0 :(得分:5)
这就是将析取转换为SQL的方式。请参阅javadoc for disjunction()
创建一个析取(零合取)。与零分离的脱节是错误的。
因此,当创建空的析取时,它只包含子句1 = 0
(false)。当其他谓词被添加到析取中时,它们只是被添加到初始(假)中,用or
分隔:
where 1 = 0 or ...
如果使用连词,则会将其翻译为
where 1 = 1 and ...