2015-01-06 281 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 ...