gpt4 book ai didi

java - 为什么 FetchType.Lazy 不起作用?

转载 作者:行者123 更新时间:2023-11-30 10:41:07 36 4
gpt4 key购买 nike

我有模型类别。它可能有父类别和子类别列表。我写这个问题是因为找不到实体与他自己相关的情况。

我试着这样实现它:

@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 可以产生这个吗?

最佳答案

@damienMiheev 我也遇到过同样的问题,但调试了 1 或半小时后我发现了这个问题

即使您的父字段延迟加载,当您的字段的自动 JSON 生成 getter 被调用时,它正在获取值,这会创建一些循环执行。因为它正在获取父项然后获取子项并再次为子项集合中的每个子项获取父项并继续此过程直到 StackOverflows。

这里是你的问题的解决方案

您应该从 json 生成中排除“父”,例如您可以将该字段标记为@JsonIgnore。您也不应在 hashCode()、equals() 和 toString() 方法中包含父项和子项。

关于java - 为什么 FetchType.Lazy 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38618101/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com