Java JPA-jackson-@JsonAutoDetect-循环关系OneToMany-防止循环加载错误
我有任务和相关任务实体: 每个任务都可能有许多相关的任务,但每个任务都可能有某种循环: 任务#1有3个相关任务->任务#2、#3、#4,任务#4有相关任务#1和#5 1->2,3,4->1,5 这个圆圈在加载时出错,我如何防止它 以下是我的实体:Java JPA-jackson-@JsonAutoDetect-循环关系OneToMany-防止循环加载错误,java,hibernate,jpa,serialization,jackson,Java,Hibernate,Jpa,Serialization,Jackson,我有任务和相关任务实体: 每个任务都可能有许多相关的任务,但每个任务都可能有某种循环: 任务#1有3个相关任务->任务#2、#3、#4,任务#4有相关任务#1和#5 1->2,3,4->1,5 这个圆圈在加载时出错,我如何防止它 以下是我的实体: @JsonAutoDetect @Entity public class Task { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long ta
@JsonAutoDetect
@Entity
public class Task {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long taskId;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "task", cascade = CascadeType.ALL)
private List<TaskRelated> relatedTasks = new ArrayList<TaskRelated>();
}
@JsonAutoDetect
@Entity
public class TaskRelated {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long taskRelatedId;
@OneToOne
@JoinColumn(name="relatedTaskId", insertable=false, updatable=false)
private Task relatedTask;
@JsonIgnore
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="taskId", insertable=false, updatable=false)
private Task task;
}
如果我将@JsonIgnore设置为relatedTask,如:
@JsonIgnore
@OneToOne
@JoinColumn(name="relatedTaskId", insertable=false, updatable=false)
private Task relatedTask;
没有错误,但我没有作为对象的相关任务的数据,
你有什么想法吗?
谢谢大家! 此操作有效(您需要保存与任务相关的实体)
@实体
公开课任务{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长任务ID;
@OneToMany(fetch=FetchType.EAGER,mappedBy=“task”,cascade=CascadeType.ALL)
private List relatedTasks=new ArrayList();
}
@实体
公共类任务相关{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私有长任务相关ID;
@奥内托内
@JoinColumn(name=“relatedTaskId”)
私有任务相关任务;
@manytone(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinColumn(name=“taskId”)
私人任务;
}
必须有两种方法,即:
<> >如果您想继续使用<代码> org .CODEHUS…杰克逊…<代码>,您应该考虑使用<代码> @ JSONBACKION < /COD>和<代码> @ JSONMARKEDATION < /COD>注释。例如:
@Entity
public class Task {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long taskId;
@JsonManagedReference
@OneToMany(fetch = FetchType.EAGER, mappedBy = "task", cascade = CascadeType.ALL)
private List<TaskRelated> relatedTasks = new ArrayList<TaskRelated>();
}
@Entity
public class TaskRelated {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long taskRelatedId;
@OneToOne
@JoinColumn(name="relatedTaskId", insertable=false, updatable=false)
private Task relatedTask;
@JsonBackReference
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="taskId", insertable=false, updatable=false)
private Task task;
}
发生了什么样的错误?添加了更多信息,tnx@prilia在评论我给出的解决方案不能回答你的问题之前,你是否尝试过尝试我给出的解决方案。请尝试此解决方案,如果它没有解决您的问题,请发表评论。我将接受您的评论,并删除此答案,前提是您尝试并告诉我它没有解决您的问题,因为我相信此解决方案应该解决您的问题
@Entity
public class Task {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long taskId;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "task", cascade = CascadeType.ALL)
private List<TaskRelated> relatedTasks = new ArrayList<TaskRelated>();
}
@Entity
public class TaskRelated {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long taskRelatedId;
@OneToOne
@JoinColumn(name="relatedTaskId")
private Task relatedTask;
@ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
@JoinColumn(name="taskId")
private Task task;
}
@Entity
public class Task {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long taskId;
@JsonManagedReference
@OneToMany(fetch = FetchType.EAGER, mappedBy = "task", cascade = CascadeType.ALL)
private List<TaskRelated> relatedTasks = new ArrayList<TaskRelated>();
}
@Entity
public class TaskRelated {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long taskRelatedId;
@OneToOne
@JoinColumn(name="relatedTaskId", insertable=false, updatable=false)
private Task relatedTask;
@JsonBackReference
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="taskId", insertable=false, updatable=false)
private Task task;
}
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
@Entity
public class Task {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long taskId;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "task", cascade = CascadeType.ALL)
private List<TaskRelated> relatedTasks = new ArrayList<TaskRelated>();
}
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
@Entity
public class TaskRelated {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long taskRelatedId;
@OneToOne
@JoinColumn(name="relatedTaskId", insertable=false, updatable=false)
private Task relatedTask;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="taskId", insertable=false, updatable=false)
private Task task;
}