hibernate中的多个连接提取

时间:2015-01-06 16:14:49

标签: sql hibernate postgresql jpql

我的数据库中有几个表:

游戏表:包含 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加载每个集合的对象的技能。

1 个答案:

答案 0 :(得分:2)

这样的事情应该有效

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