JPA 一對多雙向映射 結果對象相互迭代 造成堆棧溢出問題方法

問題:

JPA 在雙向映射時,會相互包含對方的實例,相互引用,造成遞歸迭代,堆棧溢出(java.lang.StackOverflowError)。

分析:

在後端向前端傳遞的時候會將數據序列化,轉爲json,這時會出現循環引用造成堆棧溢出

解決方案:

解決方法就是在轉換json時忽略循環字段。首先確定項目使用的json包是哪一個(jackjson 或 fastjson),尋找相應的註解忽略某一字段。

jackson包對應的相關注解: @JsonIgnoreProperties、@JsonIgnore

fastjson包對應的相關注解: @JSONField(serialize = false)

注意: 在使用註解時一定要注意引入的包是否正確,如果和自己使用的json包不對應的話,註解是不生效的。

附代碼:

// 我的項目使用的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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章