2010-09-07 4 views
1

Est-il possible de limiter le nombre de lignes mises à jour en utilisant Hibernate/HQL? Par exemple:Hibernate, HSQL et mise à jour avec limites

Query q = em.createQuery("UPDATE MyObj o Set o.prop = :prop"); 
q.setParameter("prop", "foo"); 
q.setMaxResults(myLimit); 

int res = q.executeUpdate(); 
if (res > myLimit) { 
    // This is entering here and I don't want it to! 
} 

J'ai été googler autour et tel, et je suis en train d'utiliser HQL pour que je puisse faire des tests unitaires à l'aide HSQL DB dans dbs de mémoire, ainsi que l'utilisation MySql dans le déploiement. MySQL prend en charge la clause Limit sur les instructions Update, mais pas HSQL, et faire un UPDATE avec un select interne dans HSQL nécessitait un ordre par, ce qui semblait être une mauvaise idée. Existe-t-il un moyen pour moi de limiter le nombre de lignes dans une mise à jour?

Merci.

Répondre

2

Essayez HSQLDB 2.0 avec Hibernate 3.5.5

(les derniers pots de capture instantanée, pas le GA) Il ne nécessite une sélection interne avec LIMIT à la fin mais cela ne nécessite plus une clause ORDER BY. En outre, ORDER BY peut utiliser un index s'il s'agit du même index que celui utilisé pour SELECT.

Un exemple serait comme:

UPDATE MyObj o SET o.prop = :prop WHERE o.id IN (SELECT id FROM MyObj LIMIT 10) 
Questions connexes