2013-07-15 50 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不支持它,并可能永远不会支持它。您可以随心所欲地检索尽可能多的馆藏。 –

相关问题