Я использую eclipselink как поставщик JPA. У меня есть сущность, которая имеет много авторов (это поле отмечено @OneToMany(fetch = FetchType.EAGER)
). Статья и авторы загружаются вместе, используя только один запрос sql (JOIN).JPA: @OneToMany (fetch = FetchType.EAGER), разбиение на страницы и дубликаты
Для работы с пагинацией я использую следующий код:
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);
Когда setFirstResult и setMaxResults используются они, как я понимаю, определить limit part
в SQL запросе. В результате у меня есть две проблемы:
- Когда я хочу, чтобы получить 10 статей, которые я получаю только две статьи, где первая статья имеет 4 авторов, а второй один имеет 6 авторов
- Статья дублирования - у меня есть один статью с разными авторами на разных страницах.
Как решить такую проблему?
Это ошибка вашего провайдера JPA. FirstResult/maxResults должны применяться к объектам Article, независимо от того, что еще выберет. Поднимите ошибку, если ее уже нет –