【问题标题】:Hibernate - multiple many to many associations - cannot simultaneously fetch multiple bagsHibernate - 多个多对多关联 - 不能同时获取多个包
【发布时间】:2013-05-03 17:36:55
【问题描述】:

我正在尝试以级联方式映射两个多对多关联。我有三个类:用户、用户组和权限。第一个与第二个具有多对多关联,而第二个与第三个具有多对多关联。

我使用的是休眠 4.2.0

@Entity
@Table(name = "user")
public class User implements Serializable {
    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, targetEntity = org.weedea.bidupsys.user.logic.model.UserGroup.class)
    @JoinTable(name = "UserGroupUser", joinColumns = { @JoinColumn(name = "userId") }, inverseJoinColumns = { @JoinColumn(name = "userGroupId") })
    private List<UserGroup> userGroupList = null;
}

@Entity
@Table(name = "userGroup")
public class UserGroup implements Serializable {
    @ManyToMany(fetch = FetchType.EAGER, targetEntity = org.weedea.bidupsys.user.logic.model.Permission.class, cascade = { CascadeType.ALL })
    @JoinTable(name = "UserGroupPermission", joinColumns = { @JoinColumn(name = "userGroupId") }, inverseJoinColumns = { @JoinColumn(name = "permissionId") })
    private List<Permission> permissionList = null;
}

使用此配置时出现错误,因为我尝试同时加载两个急切的集合:

javax.servlet.ServletException: cannot simultaneously fetch multiple bags
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:229)

如果我将 fetch = FetchType.LAZY 放在第二个集合上,我会收到另一个错误:

failed to lazily initialize a collection of role: org.weedea.bidupsys.user.logic.model.UserGroup.permissionList, could not initialize proxy - no Session

如何映射这两个多对多关联?感谢您的帮助!

【问题讨论】:

    标签: java hibernate jpa many-to-many


    【解决方案1】:

    简短的回答是您需要将它们映射为java.util.Sets。

    这里有一篇很好的博客文章解释了这个问题:Hibernate Exception - Simultaneously Fetch Multiple Bags

    【讨论】:

      猜你喜欢
      • 2011-05-19
      • 2016-09-13
      • 2014-08-31
      • 1970-01-01
      • 2017-08-20
      • 2011-03-15
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      相关资源
      最近更新 更多