休眠中的多个连接提取
multiple join fetches in hibernate
我的数据库中有几个 table:
games table:有team1、team2等栏目.
两列都引用另一个 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 ...
我的数据库中有几个 table:
games table:有team1、team2等栏目. 两列都引用另一个 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 ...