一尘不染

休眠@ManyToMany双向渴望获取

hibernate

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

我有2个对象:组和用户。我的课程如下所示:

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

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

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

如何解决此问题,并且仍然具有双向关联以及到达列表中对象的能力?


阅读 221

收藏
2020-06-20

共1个答案

一尘不染

如果使用属性(无论如何都应使用)将双向关联的一侧设为关联的 拥有 侧,是否会遇到相同的问题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;
}

更新:
我找不到任何证据表明EAGER禁止在双向关联的两面使用Fetch和AFAIK,在Hibernate文档和/或JPA规范中没有提及这种限制。

实际上,根据此评论从灵光伯纳德一个(在某种程度上类似)的问题:

LAZYEAGER应正交于代码库中的无限循环问题。Hibernate知道如何处理循环图

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

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

2020-06-20