gpt4 book ai didi

java - 多对多 jpa stackoverflow

转载 作者:行者123 更新时间:2023-11-29 04:32:13 27 4
gpt4 key购买 nike

我调试了代码,变量“empresasucursal”嵌入了大量相同的信息,导致内存溢出。根据下图的数据库模型,关联类的正确方法是什么

[![empresa_sucursal][1]][1]

类 Java Empresa

@Entity
@Table(name = "empresa")
public class Empresa implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="idempresa")
private Integer idempresa;

@javax.persistence.Temporal(TemporalType.TIMESTAMP)
private Date fechaRegistro;

@Column(name="direccionFiscal")
private String direccion;

private String nombre;

@Column(name="contactoTelefonoCelular")
private String celular;

@Column(name="regimenUnicoContribuyente")
private String ruc;


private String estado;

private String codigoEmpresa;


@OneToMany(mappedBy="empresa")
private List<EmpresaSucursal> empresaSucursal;
}

类Java Sucursal

@Entity
@Table(name = "sucursal")
public class Sucursal implements Serializable{


@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "idsucursal")
private int idsucursal;

@Column(name = "nombreSucursal")
private String nombre;

private String direccion;

@Column(name = "contactoTelefonoFijo")
private String telefonoFijo;

private String fechaRegistro;

private String estado;

@Column(name = "codigoSucursal")
private String codigoSucursal;

@OneToMany(mappedBy = "sucursal")
private List<EmpresaSucursal> empresaSucursal;
}

类 Java EmpresaSucursal

@Entity
@Table(name = "empresa_sucursal")
public class EmpresaSucursal implements Serializable {

@Id
@ManyToOne
@JoinColumn(name = "idempresa",referencedColumnName="idempresa")
private Empresa empresa;

@Id
@ManyToOne
@JoinColumn(name = "idsucursal" ,referencedColumnName="idsucursal")
private Sucursal sucursal;

@Column(name="estado")
private String estado;

}

Controller 方法

@RequestMapping(method = RequestMethod.GET, value = "/{empresaId}", produces 
= MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public Empresa obtenerEmpresa(@PathVariable Integer empresaId) throws
EmpresaNotExistException{
Empresa empresa =this.empresaRepository.findOne(empresaId);
System.out.println(empresa.toString());
return empresa;
}

控制台错误

017-04-17 10:05:10.442 WARN 9788 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: Infinite recursion (StackOverflowError) (through reference chain: com.gdata.auth.bean.Sucursal["empresaSucursal"]->org.hibernate.collection.internal.PersistentSet[0]->com.gdata.auth.bean.EmpresaSucursal["sucursal"]->com.gdata.auth.bean.Sucursal["empresaSucursal"]->org.hibernate.collection.internal.PersistentSet[0]->com.gdata.auth.bean.EmpresaSucursal["sucursal"]->com.gdata.auth.bean.Sucursal["empresaSucursal"]->org.hibernate.collection.internal.PersistentSet[0]->com.gdata.auth.bean.EmpresaSucursal["sucursal"]->com.gdata.auth.bean.Sucursal["empresaSucursal"]->org.hibernate.collection.internal.PersistentSet[0]->com.gdata.auth.bean.EmpresaSucursal["sucursal"]->com.gdata.auth.bean.Sucursal["empresaSucursal"]->org.hibernate.collection.internal.PersistentSet[0]->com.gdata.auth.bean.EmpresaSucursal["sucursal"]->com.gdata.auth.bean.Sucursal["empresaSucursal"]->org.hibernate.collection.internal.PersistentSet[0]->com.gdata.auth.bean.EmpresaSucursal["sucursal"]->com.gdata.auth.bean.Sucursal["empresaSucursal"]->org.hibernate.collection.internal.PersistentSet[0]->com.gdata.auth.bean.EmpresaSucursal["sucursal"]->com.gdata.auth.bean.Sucursal["empresaSucursal"]->org.hibernate.collection.internal.PersistentSet[0]->com.gdata.auth.bean.EmpresaSucursal["sucursal"]->com.gdata.auth.bean.Sucursal["empresaSucursal"]->org.hibernate.collection.internal.PersistentSet[0]-> ..........

2017-04-17 10:05:10.447 WARN 9788 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Handling of [org.springframework.http.converter.HttpMessageNotWritableException] resulted in Exception

最佳答案

这些都是用来解决无限递归(StackOverflowError Ex)

您可以使用 @JsonIgnore 来打破循环。

或:

@JsonManagedReference is the forward part of reference – the one that gets serialized normally. @JsonBackReference is the back part of reference – it will be omitted from serialization.

请检查考试:

@Entity
@Table(name = "empresa_sucursal")
public class EmpresaSucursal implements Serializable {

/.../

@JsonBackReference
@Id
@ManyToOne
@JoinColumn(name = "idsucursal" ,referencedColumnName="idsucursal")
private Sucursal sucursal;


@Entity
@Table(name = "empresa")
public class Empresa implements Serializable {

/.../

@JsonManagedReference
@OneToMany(mappedBy="empresa")
private List<EmpresaSucursal> empresaSucursal;
}

关于java - 多对多 jpa stackoverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43380196/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com