我必須創建一個命名查詢,我需要按照字段對結果進行分組,並使用IN子句來限制結果。IN子句與OpenJpa中的大列表導致太複雜的語句
的,它看起來像這樣
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確實是爲「少數」記錄設計的(它仍然可以是很多),並且該設置的大小不是它。你在做什麼,你一次搞亂了那麼多的記錄?你可能更適合批量加載到一個表中加入(類似於現有的答案,但有一些特殊的工具)。 – 2014-10-06 11:25:53