我正在尋找一種策略來批量處理所有查詢(使用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