Ich benutze Eclipselink als JPA-Anbieter. Ich habe einen Entity-Artikel, der viele Autoren hat (dieses Feld ist mit @OneToMany(fetch = FetchType.EAGER)
gekennzeichnet). Artikel und Autoren werden zusammen mit nur einer SQL-Abfrage (JOIN) geladen.JPA: @OneToMany (fetch = FetchType.EAGER), Seitenumbruch und Duplikate
mit Paginierung arbeiten ich den folgenden Code verwenden:
String queryString="SELECT DISTINCT e FROM Article e LEFT JOIN FETCH e.authors";
Query query = em.createQuery(queryString);
query.setHint("eclipselink.join-fetch", "e.authors");
query.setFirstResult(position);
query.setMaxResults(amount);
Wenn setFirstResult und setMaxResults sie verwendet werden, wie ich sie verstehe, limit part
in SQL-Abfrage definieren. Als Ergebnis habe ich zwei Probleme:
- Wenn ich will 10 Artikel bekommen bekomme ich nur zwei Artikel, in denen der erste Artikel 4 Autoren hat, und die zweite 6 Autoren
- Artikel Duplizierung - Ich habe eine Artikel mit verschiedenen Autoren auf verschiedenen Seiten.
Wie löst man solch ein Problem?
das ist ein Fehler in Ihrem JPA-Anbieter. Die firstResult/maxResults sollte für die Artikelobjekte gelten, unabhängig davon, was sonst noch abgerufen wird. Erhebe einen Fehler, wenn noch keiner vorhanden ist –