【问题标题】:Hibernate Query Returning Duplicate results休眠查询返回重复结果
【发布时间】: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?您需要其他联接做什么?

标签: java sql hibernate


【解决方案1】:

您的 HQL 查询的结构类似于 SQL 查询。您不需要指定“开启”条件,因为它们是从休眠模式派生的。

有关 hql 连接的更多信息,请参阅 hibernate 文档: http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-joins

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    相关资源
    最近更新 更多