Hibernate, HSQL и обновление с ограничениями - PullRequest
2 голосов
/ 07 сентября 2010

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

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 в памяти dbs, а также использовать MySql при развертывании. MySql поддерживает предложение Limit в операторах Update, но HSQL - нет, а выполнение UPDATE с внутренним выбором в HSQL требует порядка, который кажется плохой идеей. Есть ли способ для меня ограничить количество строк в обновлении?

Спасибо.

1 Ответ

2 голосов
/ 07 сентября 2010

Попробуйте HSQLDB 2.0 (последние jar снимков, а не 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)
...