如何解决子实体中多对多关系的堆栈溢出异常
我有与具有多对一关系的类别相关联的产品实体
public class Product {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "category",nullable = false)
@JsonIgnore
private Category category;
}
现在类别实体与品牌实体具有多对多关系。
public class Brand {
@ManyToMany(mappedBy = "productCompanyList")
@JsonIgnore
private List<Category> categories;
}
public class Category {
@ManyToMany
@Column(nullable = false)
@JsonIgnore
private List<Brand> Brands;
}
最后购买模型指的是产品
public class Purchase {
@OnetoOne(cascade = CascadeType.ALL,orphanRemoval = true)
private Product product;
}
当我运行下面的代码时,它抛出堆栈溢出异常,因为它无限递归地获取类别和品牌。
List<Purchase> collect = purchaseList.stream()
.map(a -> {
Product p = this.Productrepo.getById(a.getProduct().getId()).orElse(null);
a.setProduct(p);
System.out.println(p);
return a;
})
.collect(Collectors.toList());
解决方法
ManyToMany 需要一个映射表。代码应该看起来像
@Entity
public class Brand {
@ManyToMany(mappedBy = "brands")
@JsonIgnore
private List<Category> categories;
}
@Entity
public class Category {
@ManyToMany
@JoinTable(
name = "Category_Brand",joinColumns = { @JoinColumn(name = "category_id") },inverseJoinColumns = { @JoinColumn(name = "brand_id") }
)
@JsonIgnore
private List<Brand> brands;
}
mappedBy 必须指向另一个实体中的一个字段。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。