Как я могу ограничить количество строк, обновляемых в запросе JPQL?

Я хочу ограничить этот запрос на обновление только для обновления 5 строк:

Query updateQuery = em.createQuery("update Entity e SET e.myVar = 1");
updateQuery.setMaxResults(5).executeUpdate();

setMaxResults не справляется со своей задачей. Как я могу сделать это в jpql?


person Grant Cermak    schedule 02.03.2011    source источник


Ответы (1)


Если переносимость не является проблемой, вы можете перейти к собственному запросу базы данных.

  • Оракул: em.createNativeQuery("update TableName SET myVar = 1 where id IN (SELECT id FROM TableName WHERE ROWNUM <= 5)").executeUpdate();

  • Мой SQL: em.createNativeQuery("update TableName SET myVar = 1 where id IN (SELECT id FROM TableName LIMIT 5)").executeUpdate();

ROWNUM и LIMIT используются для ограничения количества результатов в запросе для Oracle и MySql соответственно.

Не указали, какую базу данных вы используете. Предоставленный образец кода может помочь вам, внесите соответствующие изменения.

person Nayan Wadekar    schedule 29.04.2011
comment
Это полезно и ответ, но мне действительно нужен независимый от платформы способ сделать это. - person Grant Cermak; 29.06.2011
comment
Можно попробовать Criteria API, используя подзапросы, где в подзапросе вы можете ограничить количество результатов, которые должны быть извлечены, с помощью setMaxResults (размер), а затем обновить эти записи в основном запросе. В противном случае без него можно выполнить два запроса: один для получения определенного количества записей, а затем их обновление. - person Nayan Wadekar; 30.06.2011