是的,這是可能的,但你必須處理兩個問題:
1)在系列化,傑克遜將調用吸氣Foo.getBarSet()
。這將會崩潰,因爲默認情況下,Hibernate會返回@OneToMany
和@ManyToMany
關係的懶惰集合。
如果你不需要他們,@JsonIgnore
註釋它們:
@Entity
public class Foo {
@JsonIgnore
@ManyToMany
private Set<Bar> barSet;
@JsonIgnore
@OneToMany
private Set<Zzz> zzzSet;
}
如果需要的話,你必須告訴Hibernate來加載它們。例如,你可以註釋@ManyToMany
和@OneToMany
與fetch = FetchType.EAGER
(這不是BTW唯一的解決辦法):
@Entity
public class Foo {
@ManyToMany(fetch = FetchType.EAGER)
private Set<Bar> barSet;
@OneToMany(fetch = FetchType.EAGER)
private Set<Zzz> zzzSet;
}
2)它也可能會導致一些無限循環:
- 富調用的序列化
Foo.getBarSet()
- 酒吧電話的序列化
Bar.getFoo()
- Foo電話的序列化
Foo.getBarSet()
- [...]
這可以用@JsonManagedReference
和@JsonBackReference
處理:
@Entity
public class Foo {
@JsonManagedReference
@OneToMany
private Set<Zzz> zzzSet;
而在另一邊:
@Entity
public class Zzz {
@JsonBackReference
private Foo parent;
}
您可以輕鬆地返回類似foo對象,但那麼你需要忽略你在酒吧課的引用,否則傑克遜會崩潰。 – kai
太好了。你能告訴我如何做到這一點? –
使用@JsonIgnore註釋並在條類中註釋foo的引用。這會阻止你獲得循環依賴。 – kai