Hibernate(或EntityManager?)添加"其中0 = 1"查询

时间:2013-06-06 22:05:46

标签: hibernate jpa entitymanager

我正在使用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部分的可能原因。有任何想法吗?我会首先搜索答案,但搜索引擎会忽略=

1 个答案:

答案 0 :(得分:5)

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

  

创建一个析取(零合取)。与零分离的脱节是错误的。

因此,当创建空的析取时,它只包含子句1 = 0(false)。当其他谓词被添加到析取中时,它们只是被添加到初始(假)中,用or分隔:

where 1 = 0 or ...

如果使用连词,则会将其翻译为

where 1 = 1 and ...