【发布时间】:2020-04-24 03:40:33
【问题描述】:
我有 10k 个 ID,需要从数据库中获取所有记录,但 findAllById 抛出 stack overflow 并且无法完成事务。
我该如何解决这个问题?
//itemsList has 10k records in csv format
List<Item> items = factory.getIemRepository().findAllById(itemsList);
【问题讨论】:
-
不要试图在一个查询中获取所有对象,而是分批处理它们,而不是例如每个 100 个对象。
-
快速猜测一下,您是否使用
SELECT * FROM ... WHERE id IN (...)作为查询。IN命令对许多实现都有限制,这意味着它不能超过(我认为)4k 个元素。你可以查询到WHERE id = ... OR id = ... OR ...,或者像上面建议的那样批量处理。
标签: java spring spring-boot spring-data-jpa