我正在尝试在 MySQL+JBoss+Hibernate 应用程序中执行一个很长的 'INSERT ON DUPLICATE KEY UPDATE'
,最多有几千行。它看起来像:
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 ...
这作为 native 查询工作正常,我在循环中构建查询字符串,但长查询字符串本身保留在 Hibernate 查询计划缓存中并占用大量堆空间。所以我想知道是否可以参数化此查询,以便它只在查询计划缓存中存储一次。
有没有办法像这样参数化元组列表?理想情况下,我可以在 setParameter()
中传入一组 { value1, value2, value3 }
集合。使用 (:value1, :value2, :value3)
运行数以千计的单行更新非常容易,但这会带来显着的(2-3 倍)性能成本。
提前致谢。
最佳答案
看看Hibernate batch inserts文档部分。
关于mysql - EJBQL/HQL 命名参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2134351/