весенние данные jpa проблема с postgres - попытался отправить целое число вне диапазона в виде 2-байтового значения - PullRequest
0 голосов
/ 08 февраля 2019

quoteEntitiesPage = quoteRepository.findAllByQuoteIds (quoteIds, pageRequest);

Приведенный выше запрос выдает ошибку «Попытка отправить целое число вне диапазона в виде 2-байтового значения», если количество quoteIdsпараметр выше Short.MAX_VALUE.

Каков наилучший подход для получения всех сущностей кавычек здесь?В моем классе Quote есть поля id (long) и quoteId (UUID).

1 Ответ

0 голосов
/ 16 июля 2019

При использовании запроса типа " select ... где x in (list) ", такого как ваш, Spring добавляет параметр связывания для каждого элемента списка.PostgreSQL ограничивает количество параметров связывания в запросе связыванием Short.MAX_VALUE, поэтому, когда список длиннее этого, вы получите это исключение.

Простым решением этой проблемы будет разделение списка на блоки.запросите для каждого из них и объедините результаты.

Примерно так, используя Guava:

List<QuoteEntity> result = new ArrayList<>();
List<List<Long>> partitionedQuoteIds = Lists.partition(quoteIds, 10000);
for (List<Long> partitionQuoteIds: partitionedQuoteIds) {
  result.addAll(quoteRepository.findAllByQuoteIds(partitionQuoteIds))
}

Это очень расточительно при разбивке на страницы, но этого может быть достаточно для вашего использованиядело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...