java - JPA/JPQL 返回不完整的结果 WHERE x.y IS NULL OR x.y.z = 1

标签 java sql jpa eclipselink jpql

我有以下 SQL 返回 13 个结果

SELECT *
FROM AAA a
JOIN BBB b ON b.id = a.b_id
LEFT JOIN CCC c ON c.id = b.c_id
LEFT JOIN DDD d ON d.id = c.d_id
WHERE b.c_id IS NULL
OR d.status = 1

然后 JPQL 返回 3 个结果

SELECT a
FROM AAA a
WHERE a.b.c IS NULL

然后 JPQL 返回 10 个结果

SELECT a
FROM AAA a
WHERE a.b.c.d.status = 1

但以下 JPQL 返回 10 个结果,缺少 3 个空结果。

SELECT a
FROM AAA a
WHERE a.b.c IS NULL
OR a.b.c.d.status = 1

我错过了什么?我从哪里开始调试它?

最佳答案

Where do I begin debugging this?

如果您不确定您的 ORM,请调整日志级别,以便您可以看到生成的 SQL 查询或直接检查数据库日志。

What am I missing?

条件 WHERE a.b.c.d.status = 1 强制 jpa 提供程序为路径中的所有表(BBB、CCC、DDD)创建内部联接。这抵消了 OR 条件 a.b.c IS NULL

关于java - JPA/JPQL 返回不完整的结果 WHERE x.y IS NULL OR x.y.z = 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34231009/

相关文章:

java - spring-boot 中的 json 日期格式

sql - PostgreSQL 撤销列的权限

c# - 为什么 SQLite 插入会非常慢? (使用的交易)

java - Spring Data @Query + 规范

java - 使用 JPQL 的实体类中的动态命名查询示例

java - 如何在 Java 上实现我自己的 UI 元素?

javax.sound.sampled.LineUnavailableException : line with format PCM_SIGNED 16000. 0 Hz,16 位,单声道,2 字节/帧

hibernate - 最佳实践——实体内部的 Hibernate 持久性代码?

java - 如何正确从 Firebase 提取我的数据?

SQL Server 使用 ISNULL where 子句优化大型查询