休眠中的多个连接提取

multiple join fetches in hibernate

我的数据库中有几个 table:

games table:有team1team2等栏目. 两列都引用另一个 table Team table:与 players table.

具有一对多关系

玩家 table:与技能 table.

一对一参考

作为团队实体中的实体,我收集了 FetchType 设置为 LAZY 的玩家。

我正在进行 select 查询以获取许多游戏。 无论设置为获取类型,LAZY 还是 EAGER,获取游戏的所有实体都需要相当长的时间,因为它加载了两个团队,并且对于所有团队,它会一个接一个地加载许多玩家,如 DB 日志所示。最后,它会为每个玩家加载其技能。

我想将其作为一个查询(而不是像现在这样一个接一个地查询)。但要做到这一点,我需要在 JPQL 中正确地进行连接提取查询。

我不知道怎么做。

纯 sql 中的模拟查询如下所示:

select ... from games 
inner join  teams as t1 on team_id1 = t1.id 
inner join players as ps1 on ps1.team_id = team_id1
inner join skills as sk1 on sk1.players_id = ps1.id
inner join  teams as t2 on team_id2 = t2.id 
inner join players as ps2 on ps2.team_id = team_id2
inner join skills as sk2 on sk2.players_id = ps2.id
where ...

我可以在 JQPL 中进行多个内部连接,但无法理解如何告诉 hibernate 加载每个集合的对象的技能。

像这样的东西应该可以工作

select g from Game g 
    join fetch g.teams t
    join fetch t.players p
    join fetch p.skills s
where ...