Siemacie
Mam taki problem, postaram sie powiedziec krótko. Mam 2 encje, mniej-wiecej takie:
@Entity
@Table(name="user")
public class User implements Serializable{
...
@OneToMany(mappedBy = "reporter")
@Cascade(CascadeType.ALL)
private List<Report> reportList;
i druga:
@Entity
@Table(name = "report")
public class Report implements Serializable {
...
@ManyToOne
private User reporter;
I teraz kwestia tego typu, że: jakis tam springowy controller zwraca mi w postaci JSON'a obiekt User. User ma swoja liste Report'ow, natomiast kazdy report ma swojego Usera jako właściciela, który znowu ma liste Reportów i tak w rekurencyjna nieskonczoność.
Rozwiązania które wyczytałem w internetach są dwa:
- Dodac do klasy Report przy User owner; @JsonIgnore. Wtedy jak zwracam jsona to pole User owner jest ignorowane i sie nie zapętla. Powiedzmy, że to troche średnie rozwiazanie, bo co jak chce zeby controller zwrocil mi JSON;owa postać obiektu Report? wtedy nie bede mial danych kogo jest ten Report, bo jest tam @JsonIgnore
- Dodac adnotacje: dla listy Reports w klasie User: @JsonManagedReference i dla User owner; dac @JsonBackReference, jednak generalnie daje to to samo, co @JsonIgnore.
Gdybym nawet chciał przecierpieć to, że zwracajac Report nie bede mial jego ownera, to problem pojawia sie, jakbym chciał np. wysłać nowy raport, wtedy nie moge dodac pola User bo: 1.po pierwsze mam tam @JsonIgnore 2.Jakbym go nie miał to znowu wleze w rekurencyjna pętle.
Może jakoś źle zaprojektowałem to, ale czuje, że to może być powszechny problem i po prostu nie wiem o jakiejś istotnej rzeczy.
Jakieś wsparcie? ;)