我有型号类别。它可能有父类别和子类别列表。我写了这个问题,因为找不到实体与自己有关的案例。
我试图像这样实现它:
@Entity
public class Category {
@Id
private String id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
private Category parent;
@OneToMany(mappedBy = "parent", fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
private List<Category> subcategories = Lists.newArrayList();
}
我保存了以下实体:
Category parent = new Category();
parent.setName("parent");
Category child1 = new Category();
child1.setName("child1");
child1.setParent(parent);
parent.getSubcategories().add(child1);
categoryPersistence.save(parent);
我希望看到类似的内容:
parent {
id
parent: null
childs {
child {
id
parent: ...lazy loading exception...
childs: null
}
}
}
但是在归档父母的子模型中我有递归循环。 怎么预防呢?
是的,我也使用过@JsonIgnore。但我不确定这是不错的做法。 但如果我有一个案例,当我需要一个类别,我真的需要将其发送到父母的UI。 @JsonIgnore可以制作这个吗?
答案 0 :(得分:1)
@damienMiheev我也遇到了同样的问题,但调试问题1或半小时我想出来了
即使你的父字段懒惰地加载,你的字段的自动JSON生成getter被调用,它正在获取值,这创建了一些循环执行。 因为它正在获取父级,然后获取子级并再次为子级集合中的每个子级获取父级,并继续此过程直到StackOverflows。
以下是您的问题的解决方案
你应该从json世代中排除“父”,例如你可以将该字段标记为@JsonIgnore。 你也不应该在hashCode(),equals()和toString()方法中包含父元素和子元素。