2013-07-15 89 views
4

請任何人都可以幫我找到解決這個問題的辦法。
似乎在Hibernate中,當有多個集合到fecth時,@OneToMany註釋會出現問題。
當我嘗試這樣做時,它會給出此例外Caused by: org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
這是我的實體類:由@OneToMany註釋引起的異常

@Entity 
@Table(name = "game", catalog = "competition_manager") 
public class Game implements java.io.Serializable { 
    private List<GamePlayerGoals> gamePlayerGoalses = new ArrayList<GamePlayerGoals>(0); 
    private List<GamePlayer> gamePlayers = new ArrayList<GamePlayer>(0); 

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "game") 
    public List<GamePlayerGoals> getGamePlayerGoalses() { 
     return this.gamePlayerGoalses; 
    } 

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "game") 
    public List<GamePlayer> getGamePlayers() { 
     return this.gamePlayers; 
    } 
} 

但我的問題是:無法獲取比一對多Hibernate的註解收集更多? 在此先感謝。

回答

2

Hibernate已經告訴過你問題是什麼。

您不能EAGER立即獲取超過1個「多」收集。這是因爲集合被加入Hibernate在內部使用的查詢中。

加入多個集合將需要查詢「笛卡爾乘積」結果集,獲取N * M行 - 當只需要N + M + 1時效率非常低。 (N代表球員,M代表進球或其他)。

選擇一個你想要的集合EAGER &關閉其他。下次嘗試閱讀錯誤消息。

+0

感謝您的回覆。請確保我發現錯誤信息,並且我非常瞭解它。但我的問題是:在Hibernate中獲取超過OnetoMany註釋集合是不可能的? –

+0

您應該將該問題添加到您的問題 –

+0

由於沒有很好的SQL來實現這一點,Hibernate不支持它,並可能永遠不會支持它。您可以隨心所欲地檢索儘可能多的館藏。 –

相關問題