我有一些实体类,尝试从db获取所有数据,但是出现了嵌套异常问题。请在下面查看详细信息: 工人实体:
Worker{
@Id
private Long id;
@Transient
private List<WorkerDepartment> workerDepartments;
@Transient
private List<WorkerDepartmentPosition> workerDepartmentPositions;
@Transient
private List<WorkerAdjustmentBonus> workerAdjustmentBonus;
}
WorkerDepartment实体
WorkerDepartment{
@Id
private Long id;
@ManyToOne
@JsonBackReference(value = "worker")
@JoinColumn(name = "worker_id")
private worker worker;
}
WorkerDepartmentPosition实体
WorkerDepartmentPosition{
@Id
private Long id;
@Column(name = "worker_id")
private Long workerId;
}
WorkerBonus
WorkerBonus{
@Id
private Long id;
@ManyToOne
@JsonBackReference(value = "worker")
@JoinColumn(name = "worker_id")
private worker worker;
@ManyToOne
@JoinColumn(name = "payment_id")
private WorkerPayment employeePayment;
@Column(name = "bonus")
private Double bonus;
}
我尝试获取所有工作人员,并且响应数据为
{"status":"SUCCESS","data":[have full data],"message":"successfully done"}{"status":"ERROR","message":"Handler dispatch failed; nested exception is java.lang.StackOverflowError"}
请告诉我。
答案 0 :(得分:0)
问题可能来自于Worker
和WorkerDepartment
。当Jackson尝试反序列化您的对象时,它会遍历对象图,并且一旦访问了WorkerDepartment
属性,它就会返回到Worker
并反复执行此循环-过度。
在您已经使用@JsonBackReference(value = "worker")
时,您几乎已经解决了该问题,但是在另一端则需要@JsonManagedReference
:
public class Worker{
@Id
private Long id;
@JsonManagedReference
private List<WorkerDepartment> workerDepartments;
@JsonManagedReference
private List<WorkerDepartmentPosition> workerDepartmentPositions;
@JsonManagedReference
private List<WorkerAdjustmentBonus> workerAdjustmentBonus;
}
Baeldung还为此提供了a good tutorial,以供进一步阅读。