我有一个表用户,它有一个外键存储来引用用户的存储。
其次,我有一个表Store,其外键是负责的,实际上是用户ID。
在我的Spring
应用程序中,我创建了映射对象关系,并创建了一个类@ManyTOone
的类模型,用于我的用户类中的Store和我的商店类中的用户。
我创建了存储库和REstController
。
当我在我的UserRepository中尝试findOne
方法时,我有一个无限循环,因为它正在加载用户中的存储,因此存储中的用户以及用户中的存储等等。 ..
避免这种情况的最佳做法是什么。
由于
答案 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;
...
}
请注意,默认提取类型非常渴望。