![](/img/trans.png)
[英]Infinite recursion reference with JPA OneToMany, ManyToOne Relationship
[英]getting infinite recursion with JPA hibernate by @OneToMany and @ManyToOne
我有一個無法解決的問題,我也用 JsonIgnore 嘗試過,但也沒有用。 我有一個待辦事項列表,我希望我的任務是 output 我給他們的用戶 ID。 問題是因為每個用戶都有一個任務數組,這些任務給了我一個無限循環的任務和用戶。
那是我的代碼:
用戶:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private Set<Task> tasks;
任務:
@Entity
public class Task {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "user_id", nullable = false)
private User user;
然后我有普通的 getter 和 setter 以及一個 toString 方法。
使用 @JsonManagedReference 和 @JsonBackReference
用戶:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
@JsonManagedReference
private Set<Task> tasks;
任務:
@Entity
public class Task {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
@JsonBackReference
private User user;
在反序列化中,@OneToMany 或 @ManytoOne 關系字段也被調用。 最好為響應創建響應 class 而不是實體 class 並在其中設置您的實體值。
public class TaskResponse {
private int id;
private String name;
private UserResponse user;
...setter getter
}
public class UserResponse {
private int id;
private String name;
...setter getter
}
嘗試使用以下注釋:
//--1
@OneToMany(mappedBy = "user", cascade = {CascadeType.ALL})
@JsonManagedReference
private Set`<Task>` tasks;
//--2
**@ManyToOne(cascade = CascadeType.ALL)**
@JoinColumn(name = "user_id")
@JsonBackReference
private User user;
我個人不喜歡混淆數據庫表示和序列化等職責。 在 JPA 中有一個雙向圖是完全可以的,唯一的問題是當您想將此雙向圖序列化為單向樹結構時,這就是為什么我會根據您的用例為單向樹創建第二個表示:有一個帶有淺“用戶” object 的“任務”,其中包含您在任務上下文中需要的那些值,或者有一個“用戶”,其中包含一個淺“任務”對象列表,其中恰好包含您在一個上下文中需要的那些值用戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.