java - Hibernate 具有相同类的多对多,无法编写 JSON : Infinite recursion

标签 java json spring hibernate jpa

我在使用 hibernate 和 JSON 时遇到问题,当我对同一个类使用多对多时,我得到了递归

import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.util.Set;
import java.util.UUID;

@Entity
public class AssistantGraphVertex {

    @Id
    @GeneratedValue(generator = "uuid")
    @GenericGenerator(name = "uuid", strategy = "uuid2")
    private UUID uuid;

    @ManyToOne
    private AssistantGraphs assistantGraphs;

    private String name;
    private String description;

    @ManyToMany(cascade = {CascadeType.ALL})
    @JoinTable(name = "assistant_graph_edge",
            joinColumns = { @JoinColumn(name = "parent_uuid") },
            inverseJoinColumns = { @JoinColumn(name = "child_uuid") }
    )
    private Set<AssistantGraphVertex> parents;

    @ManyToMany(mappedBy = "parents")
    private Set<AssistantGraphVertex> children;

    public UUID getUuid() {
        return uuid;
    }

    public void setUuid(UUID uuid) {
        this.uuid = uuid;
    }

    public AssistantGraphs getAssistantGraphs() {
        return assistantGraphs;
    }

    public void setAssistantGraphs(AssistantGraphs assistantGraphs) {
        this.assistantGraphs = assistantGraphs;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Set<AssistantGraphVertex> getChildren() {
        return children;
    }

    public void setChildren(Set<AssistantGraphVertex> children) {
        this.children = children;
    }

    public Set<AssistantGraphVertex> getParents() {
        return parents;
    }

    public void setParents(Set<AssistantGraphVertex> parents) {
        this.parents = parents;
    }
}

问题如下:

Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError);

我只想接收一个类的父类和子类的信息,但对于下一个嵌套类,我不需要这些信息,如何更好地实现这一点?

最佳答案

你可以简单地忽略序列化一侧起诉@JsonIgnore

@JsonIgnore
@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name = "assistant_graph_edge",
        joinColumns = { @JoinColumn(name = "parent_uuid") },
        inverseJoinColumns = { @JoinColumn(name = "child_uuid") }
)
private Set<AssistantGraphVertex> parents;

@JsonIgnore
@ManyToMany(mappedBy = "parents")
private Set<AssistantGraphVertex> children;

或者您可以使用@JsonIdentityInfo,它将在第二级序列化中为 hibernate 创建引用,这将打破循环

@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="@id")
public class AssistantGraphVertex {

有关更多详细信息,请查看此 link

关于java - Hibernate 具有相同类的多对多,无法编写 JSON : Infinite recursion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46037413/

相关文章:

php - JSON_Encode 输出奇数额外值

java - Gradle无法在Java项目中复制PNG文件

java - 使用具有参数化功能的 jenkins 执行 AWS 设备场

java - 当 JSON 为 null 时尝试从中提取

javascript - 如何使用 Angularjs 显示 Json?

java - 在 Java 中将 Map 中的 Map 转换为 JSON 的问题

java - 在动态创建的类中实例化 spring bean

spring - PROPAGATION_NESTED vs PROPAGATION_ Spring 需要吗?

java - 如何根据每个数据项的位置建立一个ArrayList

java - Android onClickListener - Android Studio 错误还是我自己的错误?