JPA 在雙向映射時,會相互包含對方的實例,相互引用,形成遞歸迭代,堆棧溢出(java.lang.StackOverflowError
)。前端
在後端向前端傳遞的時候會將數據序列化,轉爲json,這時會出現循環引用形成堆棧溢出java
解決方法就是在轉換json時忽略循環字段。首先肯定項目使用的json包是哪個(jackjson 或 fastjson),尋找相應的註解忽略某一字段。json
jackson包對應的相關注解: @JsonIgnoreProperties
、@JsonIgnore
後端
fastjson包對應的相關注解: @JSONField(serialize = false)
fetch
注意: 在使用註解時必定要注意引入的包是否正確,若是和本身使用的json包不對應的話,註解是不生效的。code
// 個人項目使用的alibaba的fastjson包 @Data class SOStudent { // ... ...省略其餘字段 @ManyToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY) @JoinColumn(name="classId") @JSONField(serialize = false) private SOClass class; } @Data class SOClass { @Id @GeneratedValue private Long id // ... ...省略其餘字段 @OneToMany(cascade={CascadeType.ALL},fetch = FetchType.EAGER) private List<SOStudent> students; }