quoteEntitiesPage = quoteRepository.findAllByQuoteIds(quoteIds,pageRequest);
如果quoteIds参数的计数高于Short.MAX_VALUE,则上面的查询给出错误“尝试将超出范围的整数作为2字节值发送”。
在此处获取所有报价实体的最佳方法是什么?我的Quote类有id(long)和quoteId(UUID)字段。
quoteEntitiesPage = quoteRepository.findAllByQuoteIds(quoteIds,pageRequest);
如果quoteIds参数的计数高于Short.MAX_VALUE,则上面的查询给出错误“尝试将超出范围的整数作为2字节值发送”。
在此处获取所有报价实体的最佳方法是什么?我的Quote类有id(long)和quoteId(UUID)字段。
2条答案
按热度按时间gdx19jrr1#
当使用类型为“select ... where x in(list)",比如你的,Spring为每个list元素添加一个bind参数。PostgreSQL将查询中绑定参数的数量限制为Short.MAX_VALUE bind,所以当列表超过这个数量时,就会出现异常。
这个问题的一个简单解决方案是将列表划分为块,查询每个块,然后合并结果。
类似这样的东西,使用Guava:
字符串
这在分页时是非常浪费的,但对于您的用例来说可能已经足够了。
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/