实体:
class A{
private int id;
@oneToMany(mappedBy = "a")
private List<B> bList;
}
class B{
private int id;
@ManToOne
private A a;
}
存储库:
interfase BRepository{
@Query("select b from B b where b.a.id = ?1")
public List<B> getB(String id);
}
控制器:
private BRepository b;
@RequestMapping("/b")
public Object getB(){
return b.getB(1);
}
以无限循环返回JSON。
在A类上使用@JsonBackReference注释,正常结果:
class A{
private int id;
@oneToMany(mappedBy = "a")
@JsonBackReference //this property is ignored
private List<B> bList;
}
但是当你查询一个类时,返回的结果不是bList(使用@JsonBackference),我该怎么做才能返回bList属性?
答案 0 :(得分:1)
我建议不要在the following reasons的对象之间使用循环引用。
这会产生很多问题,而JSON生成就是其中之一。
•循环类引用创建高耦合;每当更改其中任何一个类时,都必须重新编译这两个类。
•圆形装配参考会阻止静态链接,因为B取决于A但A在B完成之前无法组装。
•循环对象引用可能会导致堆栈溢出导致天真的递归算法(如序列化程序,访问者和漂亮的打印机)崩溃。更高级的算法将具有周期检测功能,并且仅使用更具描述性的异常/错误消息而失败。
•循环对象引用也使依赖注入无法进行,从而大大降低了系统的可测试性。
•具有大量循环引用的对象通常是God Objects。即使他们不是,他们也倾向于导致Spaghetti Code。
•循环实体引用(特别是在数据库中,但也在域模型中)阻止使用非可空性约束,这可能最终导致数据损坏或至少不一致。
•一般来说,循环引用只是令人困惑,并且在试图理解程序如何运作时会大大增加认知负荷。