Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA-jackson-@JsonAutoDetect-循环关系OneToMany-防止循环加载错误_Java_Hibernate_Jpa_Serialization_Jackson - Fatal编程技术网

Java JPA-jackson-@JsonAutoDetect-循环关系OneToMany-防止循环加载错误

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

我有任务和相关任务实体: 每个任务都可能有许多相关的任务,但每个任务都可能有某种循环:

任务#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 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;
}