首页 > 其他 > 详细

JPA 一对多双向映射 结果对象相互迭代 造成堆栈溢出问题方法

时间:2019-06-20 18:27:43      阅读:229      评论:0      收藏:0      [点我收藏+]

问题:

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;
}
原文地址:https://blog.csdn.net/stoneBridge1920/article/details/87774467

JPA 一对多双向映射 结果对象相互迭代 造成堆栈溢出问题方法

原文:https://www.cnblogs.com/jpfss/p/11060454.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!