我的数据库中有几个表:
游戏表:包含 team1 , team2 等列。 两列都引用另一个表 团队表:与玩家表有一对多的关系。
玩家表:使用技能表进行一对一参考。
作为团队实体中的实体,我将FetchType设置为LAZY的玩家集合。
我正在制作精选查询以获得许多游戏。 无论设置为获取类型,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加载每个集合的对象的技能。
答案 0 :(得分:2)
这样的事情应该有效
select g from Game g
join fetch g.teams t
join fetch t.players p
join fetch p.skills s
where ...