- 问题:
两张表双向多对一、一对多时。响应给后台使,出现此错误 - 分析: 双向关系,生成json的时候是相互调用,需要有一方忽略对方
要完成的功能时,一方能够找到多方,多方反过来又能找到一方。所以响应给前台时F12-查看网络-找到post请求,然后分别查看参数和响应会发现,参数没有问题,而响应就会报以上错误。点击json数据进去查看就会发现很多数据,响应进入了死循环。(一方找多方,找了很多,然后反过来多方又去找一方找了很多,最后又循环去找) - 解决:
在双向的两方的其中任何一方关联字段上配置@JsonIgnore这个配置就可以了。 - 实例说明:
单据是组合关系。也就是所谓的强聚合。(双向的一对多、多对一)。
两者都不能抛弃另一方。所以要配置最强的级联(cascade = CascadeType.ALL),还要有孤儿删除(orphanRemoval = true)。还有:由于一对多性能差,所以一方要放弃维护关系,让多方维护(mappedBy = “一方的字段”) - 实例
单据采购表单:
//采购明细和采购单多对一关系
@ManyToOne(fetch = FetchType.LAZY,optional = false)
@JoinColumn(name = "bill_id")//表中的采购单外键
@JsonIgnore //生成json的时候忽略这个属性
private Purchasebill billId;
单据采购明细:
// 一般组合关系使用List (采购单和采购明细单是组合关系:双向多对一,一对多)
@OneToMany(cascade = CascadeType.ALL, mappedBy = "billId", fetch = FetchType.LAZY, orphanRemoval = true)
private List<Purchasebillitem> items = new ArrayList<Purchasebillitem>();