3 回答

TA貢獻1824條經(jīng)驗 獲得超5個贊
為避免循環(huán)引用無限遞歸(stackoverflow 錯誤),您必須使用 @JsonIdentityInfo 注釋cals
所以你的課看起來像:
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
class A {
//some fields
//Integer id;
@OneToMany private B b; //if only A is requested, this should NOT be ignored
}
B類雙向使用也是如此:
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
class B {
//some fields
@ManyToOne
@IgnorePrivateBInAToAvoidStackOverflow
private Set<A> collectionOfAs;
}
請注意,property指的是您的唯一字段名稱(id 在此示例中設置為)

TA貢獻1844條經(jīng)驗 獲得超8個贊
您對@ManyToOne&的使用@OneToMany不正確,您必須在實體集合屬性上的實體@OneToMany內使用,反之亦然OneMany@ManyToOne
class A {
@ManyToOne
@JsonBackReference
private B b;
}
class B {
@OneToMany
@JsonManagedReference
private Set<A> collectionOfAs;
}
并且據(jù)我所知,您想忽略所有者B從 class 進行反向引用A,并創(chuàng)建一個 stackoverflow 異常,以使用我在上面的示例中添加的注釋來實現(xiàn)這一點,@JsonBackReference這@JsonManagedReference將停止無限在它的軌道上循環(huán)。

TA貢獻1811條經(jīng)驗 獲得超6個贊
如果 B 類有一個 A 類的集合,那么 B 類中的 A 的集合應該被注釋@OneToMany,并且 A 類中的字段應該被注釋@ManyToOne,那么你可以@JsonIgnore像這樣把你放在集合上:
class A {
//some fields
@ManyToOne private B b; //if only A is requested, this should NOT be ignored
}
class B {
//some fields
@OneToMany
@JsonIgnore
private Set<A> collectionOfAs;
}
我的猜測是您收到 StackOverflow 錯誤,因為當您獲取 B 類的某個對象時,它帶來了 As 類的對象集,它們本身帶來了最初獲取的 B 類的相同對象,這將去無限,除非您在 Set 字段上提供 @JsonIgnore。這樣,當你調用 A 類的對象時,它們 B 類的字段對象也會被獲取,但是當你調用 B 類的對象時,它們的 As 類集合將被忽略。
添加回答
舉報