我有一个我认为应该很普遍的问题,但找不到答案。
我有2个对象:组和用户。我的课程如下所示:
class Group { @ManyToMany(fetch = FetchType.EAGER) List<User> users; } class User { @ManyToMany(fetch = FetchType.EAGER) List<Group> groups; }
现在,当我尝试从数据库中获取用户时,它带来了所有组,所有组都带来了所有用户,依此类推。最后,我遇到了stackoverflow异常。
如何解决此问题,并且仍然具有双向关联以及到达列表中对象的能力?
如果使用属性(无论如何都应使用)将双向关联的一侧设为关联的 拥有 侧,是否会遇到相同的问题mappedBy?像这样:
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规范中没有提及这种限制。
EAGER
实际上,根据此评论从灵光伯纳德一个(在某种程度上类似)的问题:
LAZY或EAGER应正交于代码库中的无限循环问题。Hibernate知道如何处理循环图
LAZY
对我来说,上面的内容很清楚,Hibernate应该能够处理您的映射(正如我在评论中提到的那样),我很容易将任何矛盾的行为都视为错误。
如果您可以提供一个允许重现问题的测试用例 ,我的建议是打开一个问题。