Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jpa和hibernate的自连接映射实体在执行findAll时会导致循环_Hibernate_Jpa_Spring Data Jpa_Nhibernate Mapping_Self Join - Fatal编程技术网

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

使用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

我有一个名为Investmento的实体,它需要自连接,因为它内部有更多Investmento。我按照这里的许多指南来映射它,但是当我用我的服务执行findAll时,它只是在一次又一次地尝试执行自己。 我能做些什么来避免这种情况?另一个@ManyToOne只是包含简单列的其他表。请问我该怎么修

@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)中创建循环依赖项时。提供更多上下文。添加异常的堆栈跟踪。