Mam zlecenia JPA w stosunku ManyToOne do Klienta. Jest dwukierunkowy, dzięki czemu Klient ma również zamówienia w polu OneToMany. Obie relacje używają pobierania EAGER (lub są w programie pobierania OpenJPA).zapobieganie wybiórcom N + 1 w JPA
Po wybraniu z zamówienia otrzymuję 1 opcję wyboru dla zamówień i N opcji dla pola Klient.orders. Ku mojemu zaskoczeniu ten problem występuje w OpenJPA, EclipseLink i Hibernate, nawet gdy używam JOIN FETCH (który działa w przypadku jednokierunkowym).
Czy istnieje dobry sposób rozwiązania tego problemu? Czy istnieją jakieś rozwiązania dotyczące rozwiązywania problemów z wyborem N + 1 w przypadku bardziej złożonych wykresów?
EDIT: Wyniki moich badań: - Na OpenJPA (którego używam) nie wiem rozwiązanie jeszcze - Na hibernacji @Fetch (FetchMode.SUBSELECT) rozwiązuje ten problem. Korzystanie z @BatchSize również pomaga, to wybiera określoną liczbę customer.orders pól w tym samym czasie. - Dla EclipseLink znalazłem podobną funkcję @BatchFetch (value = BatchFetchType.IN), ale nie pomaga w tym przypadku, przypuszczam, że nie może wydajnie obsłużyć tego w dwukierunkowej relacji.
To jest trochę niewyraźne pytanie. Czy masz * jeden konkretny problem *, z którym chcesz pomóc, czy chcesz po prostu złożyć skargę na WZP? – millimoose
Masz rację, byłem trochę sfrustrowany WZP, będę edytować moje pytanie, aby być bardziej na temat. –
Czy naprawdę potrzebujesz pobierania EAGER na stronie Customer.orders? – Esteve