【发布时间】:2018-05-02 15:17:20
【问题描述】:
我正在尝试加入 3 个表以获得输出。以下是表格
player_match(match_id,team_id,player_id)
玩家(player_id,name,......)
团队(team_id,name......)
所有表都分配了等效的类。
以下是我正在运行并获得正确结果的 SQL 查询。
select * from player_match M
inner join team T
on M.team_id = T.team_id
inner join player P
on P.player_id = M.player_id
where M.match_id = 335987;
我在 PlayerMatch java 类中运行以下命名查询。 PlayerMatch 类中有 Match 和 Team 对象。这两个对象都映射为@ManyToOne。
@NamedQuery(name="getMatchData",query="select PM from PlayerMatch PM "
+ "inner join Team T on PM.teamId = T.teamId "
+ "inner join Player P on PM.playerId = P.playerId "
+ "where PM.matchId = :matchID")
当我运行上面的休眠查询时,我得到了 22 个正确的结果,但是所有结果的内容都是一样的。
我上面提到的 SQL 查询返回 22 个不重复的行。
我认为我在 Hibernate 查询中的某个地方搞砸了,但不知道在哪里。
【问题讨论】:
-
实际上,你有 1 个 player_match,而不是 22 个。
-
对不起,我没听懂你说的。能否请您详细说明。
-
从 Hibernate 的角度来看,只有一个
PlayerMatch具有给定 ID 的实体。 -
实际上将有 22 个条目,您会看到 match_id 不是主键或唯一键。所以每个 match_id 字段将在 player_match 表中有 22 个条目。 player_match 表包含 team_id 和 player_id,我使用这些字段从各个表中获取详细信息,即团队和比赛。
-
我不认为我跟随。您想用
match_id=335987检索所有PlayerMatches,对吗?为什么不简单地使用SELECT pm FROM PlayerMatch pm JOIN WHERE pm.match_id = 335987?您需要其他联接做什么?