jpql左连接条件

时间:2015-05-07 19:00:44

标签: eclipselink jpql glassfish-4 java-ee-7

我没有那么简单的查询工作,我现在不知道为什么。我有三个实体(只是语义代码):

Profile {
@OneToMany
Set<ProfileClubMapping> clubs
String username
...
}

ProfileClubMapping {
@ManyToOne
Profile profile
@ManyToOne
Club club
...
}

Club {
@OneToMany
Set<ProfileClubMapping> profiles
...
}

现在我想选择包含用户名中的字符串和具有特定俱乐部ID的ProfileClubMapping的每个配置文件。如果不存在ProfileClubMapping,则只返回ProfileClubMapping的null。 我尝试过类似的东西:

SELECT p,pcm FROM Profile p LEFT JOIN p.clubs pcm ON pcm.club.id = :clubId WHERE UPPER(p.username) = UPPER(:str)

但此查询仅返回具有ProfileClubMapping的配置文件。 有人有想法吗?

编辑:也许sql查询有帮助:

SELECT p.USERNAME, pcm.CLUB_ID FROM PROFILE AS p LEFT JOIN PROFILECLUBMAPPING AS pcm ON pcm.PROFILE_ID = p.ID AND pcm.CLUB_ID = :clubId WHERE  p.USERNAME LIKE '%:username%';

1 个答案:

答案 0 :(得分:0)

我们改为LEFT OUTER JOIN。 join的行为与普通SQL的行为相同。参见例如 - &gt; http://www.w3schools.com/sql/sql_join_left.asp