2015-01-06 280 views
0

我在DB几个表:多个连接取休眠

游戏表:有这样的列TEAM1TEAM2。 两栏均引用另一张表 团队表:与玩家表具有一对多关系。

玩家表:与技巧表有一对一参考。

作为团队实体中的实体我收集了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加载每个集合的对象的技能。

回答

2

像这样的东西应该工作

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