#java #spring #spring-boot #jpa #spring-data-jpa
#java #весна #spring-boot #jpa #spring-data-jpa
Вопрос:
Я хочу реализовать запрос, который возвращает постраничный запрос / ответ.
@Repository
@SuppressWarnings("all")
public interface OfferingsRepository extends JpaRepository<Offerings, UUID>,
CustomJpaSpecificationExecutor<Offerings> {
.......
}
Сделайте запрос в таблицу с 23 строками:
Page<Offerings> all = offeringsRepository .findAll(
new Offerings(searchCriteria, relevance),
PageRequest.of(0, 20));
long count = all.getTotalElements();
Количество должно быть 23, но я получаю 20. Я не могу понять, почему я получаю значение 20. Оно должно быть 23. Вы знаете, как я могу решить эту проблему.
Ответ №1:
Вам необходимо указать отдельный запрос countQuery в вашем API. По умолчанию вы получаете количество записей, возвращаемых методом findAll(), которое входит в топ-20.
Пример кода для вашего интерфейса:
@Query(name = "SELECT offr FROM Offerings offr", countQuery = "SELECT count(offr) FROM Offerings offr")
Page<Offerings> findAll();
Комментарии:
1. К сожалению, этот код находится в библиотеке, которую я не могу изменить. Любое другое решение?
2. Можно ли как-то расширить
findAll()
до включенияcountQuery = "SELECT count(offr) FROM Offerings offr"
без добавления запроса, потому что у меня сложная спецификация и внутреннее соединение?3. Вероятно, вам придется дублировать критерии, чтобы получить точное количество. К сожалению, вы не можете его расширить.
4. Еще один вопрос. Могу ли я использовать свою пользовательскую спецификацию сборки в собственный запрос, который вы вставили выше?
5. Я никогда этого не пробовал. Вы должны иметь возможность использовать countQuery со спецификацией. Это JPQL.