Java 弹簧外键无限循环
我有一个表用户,它有一个外键存储来引用该用户的存储 其次,我有一个表存储,它有一个外键,实际上是一个用户Id 在我的Java 弹簧外键无限循环,java,mysql,spring,Java,Mysql,Spring,我有一个表用户,它有一个外键存储来引用该用户的存储 其次,我有一个表存储,它有一个外键,实际上是一个用户Id 在我的Spring应用程序中,我创建了映射对象关系,并使用@ManyTOone为我的用户类中的Store和我的Store类中的User创建了一个类模型 我创建了存储库和一个REstController 当我在我的UserRepository中尝试一个findOne方法时,我有一个无限循环,因为它正在加载用户中的存储,用户在存储中,存储在用户中,等等 避免这种情况的最佳做法是什么 谢谢如果
Spring
应用程序中,我创建了映射对象关系,并使用@ManyTOone
为我的用户类中的Store和我的Store类中的User创建了一个类模型
我创建了存储库和一个REstController
当我在我的UserRepository中尝试一个findOne
方法时,我有一个无限循环,因为它正在加载用户中的存储,用户在存储中,存储在用户中,等等
避免这种情况的最佳做法是什么
谢谢如果您直接渲染它,您必须使用注释设置一个与托管引用的关系 @JsonManagedReference,例如在您的OneToMany声明中 和 @@ManyToOne声明上的JsonBackReference注释 如果你不这样做,你会遇到这个无限循环 还有其他的可能性看看这个: 我希望这将对您有所帮助。查看您的属性:
@ManyToOne(fetch=FetchType.LAZY)
。如果两个实体中都有@manytone
和@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;
...
}
@实体(name=“ATTRIBUTE”)
公共类属性{
...
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“CONFIG\u ID”)
私有配置;
...
}
@实体(name=“CONFIG”)
公共类配置{
...
@OneToMany(mappedBy=“config”,fetch=FetchType.EAGER)
私有集属性;
...
}
请注意,默认的获取类型是eager。这样的循环依赖不会导致无限循环。显示您的代码。您是否设法解决了问题?这些将影响实体不会传递相关的子对象。。。这不是他想做的。对于您的解决方案,您必须调用存储库两次。第一次是配置,第二次是属性,两者都要交付……是的,这是真的,但只适用于属性实体:我们必须显式地从中加载配置。但配置实体急切地加载所有相关属性。