@OneToMany注释导致的异常

时间:2013-07-15 09:17:43

标签: java hibernate

请任何人帮我找到解决这个问题的方法。
似乎在Hibernate中,当有多个集合时,@OneToMany注释存在问题。
 当我尝试这样做时,它会给出此异常Caused by: org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
这是我的实体课:

@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中获取超过OnetoMany注释的集合是不可能的? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

Hibernate已经告诉你问题是什么了。

你不能EAGER一次获取超过1“多”的收藏品。这是因为该集合已加入Hibernate内部使用的查询中。

在此加入多个集合将需要查询“笛卡尔积”结果集,获取N * M行 - 当仅需要N + M + 1时效率非常低。 (N代表球员,M代表进球或其他)。

选择一个你想要的集合EAGER&amp;把它关掉另一个。下次,请尝试阅读错误消息。