hibernate @ManyToMany 双向急切获取

2023-11-23

我有一个我认为应该很常见的问题,但我找不到答案。

我有 2 个对象:组和用户。我的课程看起来像这样:

class Group
{
  @ManyToMany(fetch = FetchType.EAGER)
  List<User> users;
}

class User
{
  @ManyToMany(fetch = FetchType.EAGER)
  List<Group> groups;
}

现在,当我尝试从数据库中获取用户时,它会带来其所有组,所有组都会带来其所有用户,依此类推。最后,我得到了一个 stackoverflow 异常。

我怎样才能解决这个问题,同时仍然拥有双向关联以及访问列表中的对象的能力?


如果将双向关联的一侧设为owning协会一方使用mappedBy属性(无论如何你都应该使用)?像这样:

@Entity public class Group {
  ...
  @ManyToMany(fetch = FetchType.EAGER, mappedBy="groups")
  List<User> users;
}

@Entity public class User {
  ...
  @ManyToMany(fetch = FetchType.EAGER)
  List<Group> groups;
}

Update:我找不到任何证据表明使用EAGER禁止在双向关联的两侧进行获取,据我所知,Hibernate 文档和/或 JPA 规范中没有提及此类限制。

事实上,根据这条评论来自 Emmanuel Bernard 的一个(某种程度上相似的)问题:

LAZY or EAGER应该与代码库中的无限循环问题正交。 Hibernate 知道如何处理循环图

对我来说,上面的内容非常清楚,Hibernate 应该能够处理您的映射(正如我在评论中提到的),并且我很想将任何矛盾的行为视为错误。

如果您可以提供一个测试用例来重现问题,我的建议是提出一个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hibernate @ManyToMany 双向急切获取 的相关文章

随机推荐