2010-01-25 3 views
1

Я пытаюсь выполнить длинный 'INSERT ON DUPLICATE KEY UPDATE' с несколькими тысячами строк в приложении MySQL + JBoss + Hibernate. Это выглядит примерно так:Список именованных параметров в EJBQL/HQL

INSERT INTO Table (field1, field2, field3) VALUES 
(value1_1, value2_1, value3_1), 
(value1_2, value2_2, value3_2), 
(value1_3, value2_3, value3_3), 
... 
ON DUPLICATE KEY UPDATE ... 

Это прекрасно работает как родной запрос, где я строю до строки запроса в цикле, но сами по себе длинные строки запроса сохраняются в кэше Hibernate плана запроса и съедают много пустое пространство. Поэтому мне интересно, можно ли параметризовать этот запрос так, чтобы он хранился только один раз в кеше плана запроса.

Есть ли способ параметризовать список кортежей, как это? В идеале я мог бы сдать коллекцию { value1, value2, value3 } коллекций в setParameter(). Достаточно легко запустить тысячи однострочных обновлений с (:value1, :value2, :value3), но это достигается значительными (2-3x) эксплуатационными расходами.

Заранее спасибо.

ответ