JPQL LEFT JOIN 不起作用
JPQL LEFT JOIN is not working
我想获取所有 Branch
的列表,即使他们没有具有 user
角色的帐户
Query query = em.createQuery("SELECT NEW com.package.BranchInstructors(b,a) FROM Branch b LEFT JOIN b.accounts a WHERE b.dFlg = 0 AND a.userRole = :role ORDER BY b.name ASC");
query.setParameter("role", "user");
return query.getResultList();
不幸的是,它只返回具有 user
角色的分支,这就像在执行 INNER JOIN。
知道发生了什么吗?
问题出在您的 WHERE
与 LEFT JOIN
子句中。
如果您使用 LEFT JOIN
table Accounts
并在 WHERE
和 AND
条件下使用此 table,它的行为就像JOIN
.
因此,您可以在 LEFT JOIN
:
中使用 WITH
Query query = em.createQuery("SELECT NEW com.package.BranchInstructors(b,a) FROM Branch b
LEFT JOIN b.accounts a WITH a.userRole = :role
WHERE b.dFlg = 0 ORDER BY b.name ASC");
只需将 a.userRole is null
条件添加到您的查询中,以避免过滤您从左联接获得的空 userRole
SELECT NEW com.package.BranchInstructors(b,a)
FROM Branch b
LEFT JOIN b.accounts a
WHERE b.dFlg = 0
AND (a.userRole = :role OR a.userRole IS NULL)
ORDER BY b.name ASC"
我想获取所有 Branch
的列表,即使他们没有具有 user
角色的帐户
Query query = em.createQuery("SELECT NEW com.package.BranchInstructors(b,a) FROM Branch b LEFT JOIN b.accounts a WHERE b.dFlg = 0 AND a.userRole = :role ORDER BY b.name ASC");
query.setParameter("role", "user");
return query.getResultList();
不幸的是,它只返回具有 user
角色的分支,这就像在执行 INNER JOIN。
知道发生了什么吗?
问题出在您的 WHERE
与 LEFT JOIN
子句中。
如果您使用 LEFT JOIN
table Accounts
并在 WHERE
和 AND
条件下使用此 table,它的行为就像JOIN
.
因此,您可以在 LEFT JOIN
:
WITH
Query query = em.createQuery("SELECT NEW com.package.BranchInstructors(b,a) FROM Branch b
LEFT JOIN b.accounts a WITH a.userRole = :role
WHERE b.dFlg = 0 ORDER BY b.name ASC");
只需将 a.userRole is null
条件添加到您的查询中,以避免过滤您从左联接获得的空 userRole
SELECT NEW com.package.BranchInstructors(b,a)
FROM Branch b
LEFT JOIN b.accounts a
WHERE b.dFlg = 0
AND (a.userRole = :role OR a.userRole IS NULL)
ORDER BY b.name ASC"