我有2个域类,PO类和产品类,并且PO类中有一个列表。所以产品是ManytoOne到PO,PO是OneToMany到产品。为什么JPA OneToMany映射findAll方法返回递归对象?
public class PO {
....
@OneToMany(mappedBy = "po", cascade= CascadeType.ALL, orphanRemoval=true)
private List<Product> products = new ArrayList<>();
.....
}
public class Product {
....
@ManyToOne(optional = false)
@JoinColumn(name = "po_id")
private PO po;
....
}
并且当建立po对象时。我在po中引用了Product中的po字段。
PO repo = new PO();
....
for (StockLine item: source.getStockLines()) {
Product prod = new Product();
....
prod.setPo(repo);
repo.getProducts().add(prod);
}
当我打电话PORepo.save(po);
它的工作,外键填充和两个表中的所有数据都是正确的。
但问题是,当我取使用PORepo.findAll()
的PO,我调试和找到的对象实际上是递归引用自身。
这是正常的吗?我不认为这很正常,但是我做错了什么地方?
顺便说一句,如果我不加@JsonManagedReference和@JsonBackReference生成的JSON将是递归的格式了。 json问题可以通过上面的注解来解决,但是如何解决返回的对象问题? 我使用的弹簧引导数据JPA 1.5.6.RELEASE
什么是'POProduct'? – Andrew
您在PO类中的列表是类型为“POProduct”而不是“Product”的类型? '私人列表产品=新的ArrayList <>();' –
抱歉,这是错字,当我编辑的问题,它应该是产品。我已纠正它。 – actan