2

我正在使用 JPA EntityManager + Hiberate,并且出现了一个神秘的 where 子句。Hibernate 的调试基本上显示:

select /* bunch of columns */
from some_table
where /* several filters */
  and 0=1

运行时会发生这种情况javax.persistence.Query.getResultList。The在其 where 子句中Query有一个数组Predicates,但请放心,0 = 1它不是其中之一。

我找不到该0=1部分包含在查询中的可能原因。有任何想法吗?我会先搜索答案,但搜索引擎会忽略=.

4

1 回答 1

6

这就是将析取转换为 SQL 的方式。参见javadoc 的 disjunction()

创建析取(零析取)。零析取的析取是假的。

因此,当创建一个空析取时,它只包含子句1 = 0(false)。当附加谓词添加到析取时,它们只是简单地添加到初始(假)谓词中,用 分隔or

where 1 = 0 or ...

如果你使用连词,它会被翻译成

where 1 = 1 and ...
于 2013-06-06T22:12:08.647 回答