postgresql spring data jpa issue with postgres -尝试将超出范围的整数作为2字节值发送

14ifxucb  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(2)|浏览(125)

quoteEntitiesPage = quoteRepository.findAllByQuoteIds(quoteIds,pageRequest);
如果quoteIds参数的计数高于Short.MAX_VALUE,则上面的查询给出错误“尝试将超出范围的整数作为2字节值发送”。
在此处获取所有报价实体的最佳方法是什么?我的Quote类有id(long)和quoteId(UUID)字段。

gdx19jrr

gdx19jrr1#

当使用类型为“select ... where x in(list)",比如你的,Spring为每个list元素添加一个bind参数。PostgreSQL将查询中绑定参数的数量限制为Short.MAX_VALUE bind,所以当列表超过这个数量时,就会出现异常。
这个问题的一个简单解决方案是将列表划分为块,查询每个块,然后合并结果。
类似这样的东西,使用Guava:

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

字符串
这在分页时是非常浪费的,但对于您的用例来说可能已经足够了。

axkjgtzd

axkjgtzd2#

在PostgreSQL驱动程序42.4.0中,您现在可以将最多65,535条记录传递给IN操作符。
修复:现在支持最多65535(含)个参数的查询(以前的限制为32767)PR #2525,Issue #1311
来源:https://jdbc.postgresql.org/changelogs/2022-06-09-42.4.0-release/

相关问题