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。

知道发生了什么吗?

问题出在您的 WHERELEFT JOIN 子句中。

如果您使用 LEFT JOIN table Accounts 并在 WHEREAND 条件下使用此 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"