JPA/JPQL returns 不完整结果 WHERE x.y IS NULL OR x.y.z = 1
JPA/JPQL returns incomplete results with WHERE x.y IS NULL OR x.y.z = 1
我有以下 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 returns 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
.
我有以下 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 returns 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
.