【发布时间】:2012-02-29 19:36:53
【问题描述】:
我正在寻找一个 JPA 解决方案(独立于供应商)来批量执行查询。面临的挑战是使这个性能和线程安全。
查询示例:
Query query = em.createQuery("select e from Entity e where e.property in :list");
列表是大小在 1 到 385000 之间的集合。因此,需要批处理此查询。
最初的幼稚方法是从原始列表中获取子列表并循环直到完成。这是安全且运行良好的,只是它性能不佳。
第二种方法是将列表中的所有内容加载到临时表(永久存在,但用作临时表),然后使用原始查询并与临时表连接。这绝对是高性能的,但不是线程安全的,因为我需要在每次批处理后清除临时表,并且临时表中没有任何线程 ID 或类似的东西,它非常不安全(目前)。
我非常感谢您提出的建议,以找到一种高效且安全的方式来解决此问题。
谢谢
【问题讨论】:
-
独立于供应商意味着更改您的查询(以添加“SELECT e”),因为这不是您提供的 JPQL。发布实体类。
-
谢谢大家。稍微弄乱了查询,将对其进行修改以确保它看起来正确