【发布时间】:2014-10-06 06:51:32
【问题描述】:
我必须创建一个命名查询,我需要按一些字段对结果进行分组,并且还使用 IN 子句来限制我的结果。
它看起来像这样
SELECT new MyDTO(e.objID) FROM Entity e WHERE e.objId IN (:listOfIDs) GROUP BY e.attr1, e.attr2
我正在使用 OpenJPA 和 IBM DB2。在某些情况下,我的 ID 列表可能非常大(>80.000 个 ID),然后生成的 SQL 语句对于 DB2 来说变得过于复杂,因为最终生成的语句会打印出所有 ID,如下所示:
SELECT new MyDTO(e.objID) FROM Entity e WHERE e.objId IN (1,2,3,4,5,6,7,...) GROUP BY e.attr1, e.attr2
有什么好的方法来处理这种查询吗?一种可能的解决方法是将 ID 写入临时表中,然后在该表上使用 IN 子句。
【问题讨论】:
-
JPA 确实是为“少数”记录(仍然可能很多)而设计的,而且集合大小不是。你在做什么,你一次弄乱了这么多记录?您最好将批量加载到要加入的表中(类似于现有答案,但有专门的工具)。