JSON序列化问题与双向一对一关系

ct2axkht  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(149)

我有两个Java实体,它们之间有双向的OneToOne关系:“Sinistre”和“RapportTechnique”。当我生成JSON文件发送到前端时,我遇到了不需要的递归。## Heading ##

  • 酒店SINISTRE,锡耶纳**
@Data   
@Entity
@EqualsAndHashCode(callSuper = false)
@Table(name = "sinistre")
public class Sinistre extends Audit {

@Column
private String code;

@Column
private LocalDateTime dateIncident;

@Column
private double montantIndem;

@ManyToOne
@JoinColumn(name = "structure_id", referencedColumnName = "id")
private Structure structure;

@OneToOne(mappedBy = "sinistre")
@JsonManagedReference
private RapportTechnique rapportTechnique;

字符串
}类别RapportTechnique

@Data
@Entity
@EqualsAndHashCode(callSuper = false)
@Table(name = "rapportTech")
public class RapportTechnique extends Audit {
@Column
private String reference;

@Column
private String nature_Sinistre;

@Column
private String causes_Sinistre;

@Column
private String date_intervention;

@OneToOne
@JoinColumn(name = "sinistre_id")
@JsonBackReference
private Sinistre sinistre;


}
我尝试了@JsonIgnore注解,但它完全忽略了JSON中的关系。我发现了@JsonManagedReference和@JsonBackReference注解,它们解决了递归问题,但只在一个方向上。当为'Sinistre'实体生成JSON文件时,如何在保持双向关系的同时避免递归,其中包含对'RapportTechnique'的引用,反之亦然?

ocebsuys

ocebsuys1#

你可以使用JsonIgnoreProperties:

@OneToOne(mappedBy = "sinistre")
@JsonIgnoreProperties("sinistre")
private RapportTechnique rapportTechnique;

字符串

@OneToOne
@JoinColumn(name = "sinistre_id")
@JsonIgnoreProperties("rapportTechnique")
private Sinistre sinistre;

dpiehjr4

dpiehjr42#

选择一个类作为主体类,并在辅助类中使用**@OneToOne(fetch = FetchType.LAZY)**annotation延迟地获取对象。这确保了关联对象的延迟加载,通过仅在需要时获取它来提高性能。

相关问题