使用jpa和hibernate的自连接映射实体在执行findAll时会导致循环
我有一个名为Investmento的实体,它需要自连接,因为它内部有更多Investmento。我按照这里的许多指南来映射它,但是当我用我的服务执行findAll时,它只是在一次又一次地尝试执行自己。 我能做些什么来避免这种情况?另一个@ManyToOne只是包含简单列的其他表。请问我该怎么修使用jpa和hibernate的自连接映射实体在执行findAll时会导致循环,hibernate,jpa,spring-data-jpa,nhibernate-mapping,self-join,Hibernate,Jpa,Spring Data Jpa,Nhibernate Mapping,Self Join,我有一个名为Investmento的实体,它需要自连接,因为它内部有更多Investmento。我按照这里的许多指南来映射它,但是当我用我的服务执行findAll时,它只是在一次又一次地尝试执行自己。 我能做些什么来避免这种情况?另一个@ManyToOne只是包含简单列的其他表。请问我该怎么修 @Entity @表(name=“investmento”) 公共类Investmento实现可序列化{ private static final long serialVersionUID = 888
@Entity
@表(name=“investmento”)
公共类Investmento实现可序列化{
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>();
private static final long serialVersionUID=8883940320251385456L;
@身份证
@生成值
@列(name=“id”,nullable=false)
私人长id;
@列(name=“codice”,nullable=false,unique=true)
私人字符串密码;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“codice\u padre”,referencedColumnName=“codice”)
私人投资;
@OneToMany(mappedBy=“investmentopadre”,fetch=FetchType.LAZY)
私有集replici=新HashSet();
检查您的数据。我认为您的数据中有一个循环。假设您有三个Investmento行,a、B和C,您尝试使用Hibernate获取a。a引用B,所以Hibernate获取B。B引用C,所以Hibernate获取C。C引用a,所以它将尝试获取a。这是一个循环。您可以通过设置hi来阻止Hibernate加入bernate.max_fetch_depth为0,但这不适用于OneToMany最终修复了它,结果证明我需要@JsonManagedReference,因为Jackson试图序列化关系的两端,并以递归结束
在这里也可以找到:通常发生在序列化为JSON或在
hashcode()
或equals()
方法(可能使用Lombok)中创建循环依赖项时。提供更多上下文。添加异常的堆栈跟踪。