直接自引用导致循环异常 [英] Direct self-reference leading to cycle exception
问题描述
我有类似这样的课程
public abstract class ElasticSearchValue<T> {
private Long txId;
private Long currentTxId;
private T previous;
public Long getTxId() {
return txId;
}
public void setTxId(Long txId) {
this.txId = txId;
}
public Long getCurrentTxId() {
return currentTxId;
}
public void setCurrentTxId(Long currentTxId) {
this.currentTxId = currentTxId;
}
public Object getPrevious() {
return previous;
}
public void setPrevious(T previous) {
this.previous = previous;
}
}
还有一个扩展课程的班级上面
And a class that extends the class above
public class DailyActivity extends ElasticSearchValue<DailyActivity> {
Long agentId;
Date date;
Long success;
public Long getAgentId() {
return agentId;
}
public void setAgentId(Long agentId) {
this.agentId = agentId;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public Long getSuccess() {
return success;
}
public void setSuccess(Long success) {
this.success = success;
}
@Override
public String toString() {
return agentId + "_" + date.toString();
}
}
现在,我有一个对象键入DailyActivity,当我尝试将其转换为json字符串时,我得到以下异常:
Now, I have an object of type DailyActivity and when I try to convert it into json string I get the following exception:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Direct self-reference leading to cycle (through reference chain: com.pr.analysis.DailyActivity["previous"])
我在google上寻找解决方案,但我得到的解决方案要求将jsonIgnore放到之前的值,这不是我打算做的。有人遇到过同样的问题吗?
谢谢
I have looked for solution on google but the solution which I get asks to put jsonIgnore to previous value which is not what I intent to do. Has anyone faced the same issue? Thanks
编辑
我知道课程中有一个循环,我问的是如何反序列化课程哪个有自引用?
EDIT I know there is a cycle in the class and I am asking how to deserialize the class which has a self reference?
推荐答案
在这种情况下,你需要用 @JsonManagedReference 和 @ JsonBackReference 像这样:
In this case you need to annotate the relationships with @JsonManagedReference and @JsonBackReference like this:
@ManyToOne
@JoinColumn(name = "company_id", referencedColumnName = "id")
@JsonBackReference
private Company company
和
@OneToMany(mappedBy="company")
@JsonManagedReference
private Set<Employee> employee = new HashSet<Employee>();
有一个很好的例子这里
这篇关于直接自引用导致循环异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!