使用jpa和hibernate自连接映射实体在执行findAll时导致循环

Self-join mapping entity using jpa and hibernate causes loop when executing findAll

我有一个名为 investimento 的实体,它需要自我加入,因为它里面有更多的 investimento。我按照此处的许多指南对其进行了映射,但是当我使用我的服务执行 findAll 时,它只是循环尝试一遍又一遍地执行自己。 我该怎么做才能避免这种情况?另一个@ManyToOne 只是其中包含简单列的其他表。请问我该如何解决这个问题?

@Entity

@Table(姓名="investimento") public class Investimento 实现 Serializable {

private static final long serialVersionUID = 8883940320251385456L;

@Id
@GeneratedValue
@Column(name="id", nullable=false)
private Long id;

@Column(name="codice", nullable = false, unique = true)
private String codice;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="codice_padre", referencedColumnName = "codice")
private Investimento investimentoPadre;

@OneToMany(mappedBy = "investimentoPadre",fetch = FetchType.LAZY)
private Set<Investimento> duplicati = new HashSet<Investimento>();

检查你的数据。我认为您的数据中存在循环。假设您有三个 Investimento 行,A、B 和 C,您尝试使用 Hibernate 获取 A。 A 引用 B,因此 Hibernate 获取 B。B 引用 C,因此 Hibernate 获取 C。C 引用 A,因此它会尝试获取 A。这就是一个循环。您可以通过将 hibernate.max_fetch_depth 设置为 0 来阻止休眠加入,但这不适用于 OneToMany

终于修复了它,结果我需要@JsonManagedReference,因为 Jackson 试图序列化关系的两端并以递归结束。

在这里也找到了它:Infinite Recursion with Jackson JSON and Hibernate JPA issue