我正在寻找一种策略来批量处理所有查询(使用IN子句)以克服IN子句(See here)上数据库的限制。JPA 2.0:使用IN子句批量查询
我通常会得到大小为100000到305000的列表。所以,这对于解决这个问题变得非常重要。
到目前为止,我已经尝试了两种策略。
策略1:
创建一个实体,并且因此与一个列中的表来保存这样的值(能与JPA动态创建的临时表2.0与供应商无关?),并使用在最终清理临时表之前,将临时表中的数据作为子查询添加到原始查询中。
优点:非常高效的查询。真的很快,我必须承认我提到的数字,大部分时间都在一分钟之内。
可能的缺点:使用临时表,这对我而言实际上是永久性的。
策略2:
计算批量大小为给定的输入列表和每个批次执行查询,并累积的结果。
优点:没有临时表。易于在同一事务中的任何线程。
缺点:一个很大的缺点是执行所有批处理所花费的时间。对于上述数字,目前这个数字处于不可接受的水平。需要5至15分钟之间的任何东西!
我很感谢来自JPA大师的任何反馈,建议或改进。
谢谢。
非常感谢张贴亚伦。你的解决方案看起来不错我需要将纯SQL的东西翻译成它的JPA等价物:) – JProgrammer 2012-02-21 21:26:39