2010-01-25 6 views
1

J'essaye d'exécuter un long 'INSERT ON DUPLICATE KEY UPDATE' avec jusqu'à quelques milliers de lignes dans une application MySQL + JBoss + Hibernate. Il ressemble à:Liste de paramètres nommés dans 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 ... 

Cela fonctionne bien comme une requête native où je construis la chaîne de requête dans une boucle, mais les longues chaînes de requête eux-mêmes sont conservés dans le cache de plan de requête Hibernate et manger beaucoup de Espace de tas. Je me demande donc s'il est possible de paramétrer cette requête pour qu'elle ne soit stockée qu'une seule fois dans le cache du plan de requête.

Existe-t-il un moyen de paramétrer une liste de tuples comme ceci? Idéalement, je pourrais transmettre une collection de { value1, value2, value3 } collections en setParameter(). Il est assez facile d'exécuter des milliers de mises à jour d'une ligne avec (:value1, :value2, :value3), mais cela a un coût de performance significatif (2-3x).

Merci d'avance.

Répondre

Questions connexes