直截了当: 我有一个包含项目的小组。我希望使用外键处理该关联,这就是为什么它具有mapbyby标记的原因。我的问题是,如果我查询组,则会陷入无限循环,其中该组列出了包含该组的项目,而该项目又列出了又包含该组的项目.....等等。我的实体(最低版本):
@Entity
public class DBGroup {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
@OneToMany(mappedBy = "group",cascade=CascadeType.ALL,fetch = FetchType.EAGER)
private List<Project> projects = new ArrayList<>();
}
@Entity
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn//added this because i read somewhere this would help somehow but it didnt
private DBGroup group;
}
任何人都可以帮助避免这种循环吗?如果在DBGroup中将fetchtype更改为lazy,则会得到LazyInitializationEXception。
感谢您的帮助。
答案 0 :(得分:1)
事务结束时,您会为所有未获取的对象获得LazyInitializationEXception。
如果通过查询获取对象,请添加连接提取,例如:
从Project p中选择p加入p.group g组中
您可以在退出ejb之前通过调用size方法的代码来获取列表。
请始终使用FetchType.LAZY来防止这种情况,特别是如果是列表。