Spring外键无限循环

时间:2017-11-23 19:20:52

标签: java mysql spring

我有一个表用户,它有一个外键存储来引用用户的存储。

其次,我有一个表Store,其外键是负责的,实际上是用户ID。

在我的Spring应用程序中,我创建了映射对象关系,并创建了一个类@ManyTOone的类模型,用于我的用户类中的Store和我的商店类中的用户。

我创建了存储库和REstController

当我在我的UserRepository中尝试findOne方法时,我有一个无限循环,因为它正在加载用户中的存储,因此存储中的用户以及用户中的存储等等。 ..

避免这种情况的最佳做法是什么。

由于

2 个答案:

答案 0 :(得分:1)

如果直接将其渲染出来,则必须使用注释

为托管参考设置一个关系

@JsonManagedReference例如在您的OneToMany声明中

关于@ManyToOne声明的@JsonBackReference注释。

如果你不这样做,你会遇到这个无限循环。

还有其他可能性:

http://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion

我希望这会对你有所帮助。

答案 1 :(得分:1)

查看您的fetch type属性:@ManyToOne(fetch = FetchType.LAZY)。如果您的两个实体都有@ManyToOne@OneToMany注释,则其中一个应使用延迟提取类型以避免无限循环。例如:

@Entity(name = "ATTRIBUTE")
public class Attribute {
    ...
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "CONFIG_ID")
    private Config config;
    ...
}

@Entity(name = "CONFIG")
public class Config {
    ...
    @OneToMany(mappedBy = "config", fetch = FetchType.EAGER)
    private Set<Attribute> attributes;
    ...
}

请注意,默认提取类型非常渴望。