私はコードをデバッグし、変数 "empresasucursal"には膨大な量の同じ情報が埋め込まれており、メモリのオーバーフローが発生します。画像Many To Many jpa stackoverflow
下記[![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;
}
コントローラ方法コンソール
:10.447は--- [NIO-8080-EXEC-1] .wsmsDefaultHandlerExceptionResolver 9788 WARN017-04-17 10に
@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; }
ERROR:05:10.442は9788に警告--- [NIO-8080-EXEC-1] .wsmsDefaultHandlerExceptionResolver:HTTPの書き込みに失敗しました メッセージ: org.springframework.http.converter.HttpMessageNotWritableException: コンテンツを書き込めませんでした:無限r ecursion(StackOverflowError) (参照チェーンを通じて: 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.EmpresaSu cursal ["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: [org.springframework.http.converter.HttpMessageNotWritableException] の取り扱いが例外を生じ
コピーしたテキストなどのエラーメッセージを、よりそれを作るために(あなたがブロック引用のスタイルを使用することができます書式設定のエラーメッセージのための)質問に追加検索エンジンによって読み取り可能でインデックス可能です。さらに、クラスプロパティを減らしてhttps://stackoverflow.com/help/mcveを作成します – perissf
[多対多関連テーブルを余分な列にマッピングする]の可能な複製(http://stackoverflow.com)/questions/5127129/mapping-many-to-many-associations-table-with-extra-columns) –
[追加の列で多くのものを見る](http://stackoverflow.com/a/5127262/5909679 ) –