Spring @ManyToOne @OneToMany i nieskończona rekursja

0

To jest prosty problem, ale coś go nie ogarniam. Każda rezerwacja ma mieć reservationObject, a z kolei każdy reservationObject może być zarezerwowany wiele razy, więc ma listę rezerwacji, a jako, że każda taka rezerwacja ma w sobie reservationObject, to tworzy się takie nieskończone zagnieżdżenie. Coś chyba źle robię ale nie wiem co.

screenshot-20221002114114.png

W sumie może jednak wszystko jest tak jak ma być, chociaż nie wyświetla mi się to w postmanie dobrze, ale może tego się po prostu nie da wyświetlić dobrze.

5

graf zamkniety (cykliczny) to jeszcze nie rekursja, to "zaledwie" struktura danych
Rekursja - ewentualnie nieskończona - pojawia się dopiero w przetwarzaniu.

Brutalna serializacja zrelacjonowanych encji JPA do JSON-a staje się rekurencyjną nieskończoną - to znany przypadek.
a) Trzeba z serializacji JOSNowej wyłączyć to i owo (jak - nie pytaj mnie)

b) Lub w programie posiadającym porządne warstwy, nawet jesli są pętle z grafie encji JPA - nie ma ich w eksponowanych DTO

1

IMHO to robisz źle projektując encje JPA masz dwukierunkowe relację miedzy encjami nadrzędnymi a podrzędnymi. Jestem zdania że encje-dzieci nie powinny mieć referencji do obiektu encja-rodzic, a co najwyżej jego identyfikator Jakiś integer a nie sam obiekt encji.

3

@Jsonignore

0
MrMadMatt napisał(a):

IMHO to robisz źle projektując encje JPA masz dwukierunkowe relację miedzy encjami nadrzędnymi a podrzędnymi. Jestem zdania że encje-dzieci nie powinny mieć referencji do obiektu encja-rodzic, a co najwyżej jego identyfikator Jakiś integer a nie sam obiekt encji.

Początek ścieżki myślenia mi się podoba, ale wnioski to na odwrót.

Ze slave jest konieczne (usilnie rozsądne) wskazanie na rodzica, z tego się generuje klucz obcy. Mi by przez palce nie przeszło re-mapowanie z integera na realny obiekt.

Nadmiarowe / zbędne jest robienie List<Child> / Set<Child> w nadrzędnym, to jest tylko pewnego rodzaju accesor. A ten accesor może być bez (znacznych) kosztów zaimplementowany "ręcznie", co wiecej, ja to lubię, bo nie ma niechcianych "fetch N+1 ""

2

Taki hint, jak pobierasz sobie reservation, to naprawdę potrzebujesz wszystkich danych o reservation object, włącznie z wszystkimi innymi reservations które są połączone do tego obiektu n..1?

1 użytkowników online, w tym zalogowanych: 0, gości: 1