Я использую метод Spring Data JDB C (версия 1.1.6) CrudRepository.findAllById
для загрузки сущностей из базы данных с большим количеством идентификаторов. Базовое соединение с базой данных использует базу данных Postgres. Вызов метода вызывает PSQLException
:
2020-05-28 05:58:35,260 WARN com.zaxxer.hikari.pool.ProxyConnection [task-2] HikariPool-1 - Connection org.postgresql.jdbc.PgConnection@1224f39f marked as broken because of SQLSTATE(08006), ErrorCode(0)
org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:358)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:448)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:369)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:159)
at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:109)
...
Caused by: java.io.IOException: Tried to send an out-of-range integer as a 2-byte value: 137525
at org.postgresql.core.PGStream.sendInteger2(PGStream.java:275)
at org.postgresql.core.v3.QueryExecutorImpl.sendParse(QueryExecutorImpl.java:1553)
at org.postgresql.core.v3.QueryExecutorImpl.sendOneQuery(QueryExecutorImpl.java:1876)
at org.postgresql.core.v3.QueryExecutorImpl.sendQuery(QueryExecutorImpl.java:1439)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:323)
Исключение, похоже, в конечном итоге вызвано 16-битным ограничением количества значений в предложении SELECT IN (?)
, которое генерируется Sprint. Данные JDB C при использовании findAllById
.
Должен ли я сам разбивать список идентификаторов? Разве CrudRepository.findAllById
не должен правильно обрабатывать это способом, совместимым с базовым диалектом базы данных?