hibernate - Hibernate(或EntityManager?)添加“where 0 = 1”进行查询

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

最佳答案

这就是将析取关系转换为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/

相关文章:

java - ddl-auto update 创建了意外的表

java - 在 Java SE 中使用 CDI 和 JPA 的最简单方法是什么?

jakarta-ee - BMT/CMT 和应用程序/容器管理的 EntityManager 之间有什么关系?

Symfony 应用程序在获取 EntityManager 时卡住了

java - OneToMany 关系未反射(reflect)在使用 Hibernate 的数据库中

java - c3p 0's max number of connections doesn' t 在 Linux 中工作

java - hibernate 还是 JPA?

java - JPA 实体管理器资源处理

java - 在 Hibernate 中使用 Criteria 连接两个表?

java - Hibernate 4.3 索引注释