我有一个我认为应该很常见的问题,但我找不到答案。
我有 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(使用前将#替换为@)