2010-09-07 3 views
1

Можно ли ограничить количество строк, которые обновляются с помощью Hibernate/HQL? Например:Hibernate, HSQL и Update w/Limits

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! 
} 

Я погуглить вокруг и такие, и я пытаюсь использовать HQL так, что я могу сделать несколько модульных тестов с использованием HSQL DB в д.б.н. памяти, а также с использованием MySql в развертывании. MySql поддерживает предложение Limit для операторов Update, но HSQL этого не делает, и для выполнения UPDATE с внутренним выбором в HSQL требуется порядок, который казался плохой идеей. Есть ли способ для меня ограничить количество строк в обновлении?

Спасибо.

ответ

2

Try HSQLDB 2,0 (последние баночки снимок, а не GA) с Hibernate 3.5.5

Это не требует внутреннего выбора с LIMIT в конце, но это уже не требует ORDER BY. Кроме того, ORDER BY может использовать индекс, если он является тем же индексом, что и для SELECT.

Примером может быть, как:

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