我没有那么简单的查询工作,我现在不知道为什么。我有三个实体(只是语义代码):
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%';
答案 0 :(得分:0)
我们改为LEFT OUTER JOIN。 join的行为与普通SQL的行为相同。参见例如 - &gt; http://www.w3schools.com/sql/sql_join_left.asp