Я пытаюсь выполнить длинный 'INSERT ON DUPLICATE KEY UPDATE'
с несколькими тысячами строк в приложении MySQL + JBoss + Hibernate. Это выглядит примерно так:
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-3 раза) снижению производительности.
Заранее спасибо.