JPA / JPQL使用WHERE x.y IS NULL或x.y.z = 1返回不完整的结果

时间:2015-12-11 19:21:28

标签: 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个null。

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

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

1 个答案:

答案 0 :(得分:0)

  

我从哪里开始调试?

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

  

我错过了什么?

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