4

请任何人都可以帮助我找到解决此问题的方法。
似乎在 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 注释的集合?提前致谢。

4

1 回答 1

2

Hibernate 已经告诉你问题出在哪里。

您一次不能EAGER获取超过 1 个“许多”集合。这是因为集合被加入到 Hibernate 内部使用的查询中。

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

选择一个你想要的收藏并为另一个关闭它。下次,请尝试阅读错误消息。

于 2013-07-15T09:19:17.530 回答