java - 多对多映射 JsonMappingException : Infinite recursion (StackOverflowError)

标签 java jpa spring-boot

我知道这是一个重复的问题。这种类型的实现我做过很多次。不知道为什么这次不起作用。
非常标准的实现 我知道这是一个重复的问题。这种类型的实现我做过很多次。不知道为什么这次不起作用。
非常标准的实现

public class Car implements BaseResponse {

    @Id
    @SequenceGenerator(name = "car_generator", sequenceName = "car_sequence", allocationSize = 1)
    @GeneratedValue(generator = "car_generator")
    private Long id;
    @NotNull
    private String name;
    @NotNull
    private String description;

    @ManyToMany(fetch = FetchType.LAZY, mappedBy="cars")
    private Set<part> parts;
}

@JsonIgnoreProperties({"cars"})
public class Part implements BaseResponse {

    @Id
    @SequenceGenerator(name = "part_generator", sequenceName = "part_sequence", allocationSize = 1)
    @GeneratedValue(generator = "part_generator")
    private Long id;

    private String name;

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(
              name = "car_part",
              joinColumns = @JoinColumn(name = "part_id", referencedColumnName = "id"),
              inverseJoinColumns = @JoinColumn(name = "car_id", referencedColumnName = "id"))
    private Set<car> cars;
}

create table if not exists parts
(
    id BIGINT,
    name varchar,
    criteria varchar,
    customers_count int,
    primary key(id)
);

create table if not exists car_part
(
    car_id bigint,
    part_id bigint
);

我不断得到的错误是

Could not write content: Infinite recursion (StackOverflowError) (through reference chain: java.util.ArrayList[0]->com.saylent.domain.car["parts"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: java.util.ArrayList[0]->com.saylent.domain.car["parts"])

最佳答案

@JsonManagedReference@JsonBackReference旨在使用父字段和子字段之间的双向链接。

@ManyToMany(fetch = FetchType.LAZY, mappedBy="cars")
@JsonBackReference
private Set<part> parts;


@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
          name = "car_part",
          joinColumns = @JoinColumn(name = "part_id", referencedColumnName = "id"),
          inverseJoinColumns = @JoinColumn(name = "car_id", referencedColumnName = "id"))
@JsonManagedReference
private Set<car> cars;

关于java - 多对多映射 JsonMappingException : Infinite recursion (StackOverflowError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46121904/

相关文章:

java - Bouncy CaSTLe SCrypt 实现是否在结果中包含了这些因素?

java - 调整 JComponent 中的重绘以提高性能

java - 如何使 Hibernate 在 Oracle 上为 JPA GenerationType.AUTO 使用 SequenceHiLoGenerator?

spring-boot - 如何将Redis运行到多阶段Docker镜像构建中?

spring - 获取一系列 SQL 警告 : "relation <table> does not exist, skipping"

java - JDBC 将 Boolean 转换为 mySQL 兼容的 Boolean 类型

java - 在流过滤器之后访问所有元素

java - 如何设置 Spring/HIbernate JPA @Entiry 创建自动递增列(无 id)

java - 基于 EJB JPA 的应用程序在 1 小时 10 分钟后抛出 NPE

spring - 如何防止 Spring Boot 守护进程/服务器应用程序立即关闭/关闭?