Я хочу только обновить первую строку N в SQL:
UPDATE Table1 SET c1 = 'XXX' WHERE Id IN (SELECT TOP 10 Id FROM Table1 ORDER BY c2)
Может ли Hibernate делать это при обновлении ONE?
С Hibernate вы всегда можете выдать собственный запрос как таковой, но текущий контекст Persistence Context не будет знать удаленные записи.
Пока вы удаляете относительно небольшое количество записей, вы можете просто выбрать N объектов, а затем использовать операцию удаления, чтобы вы могли воспользоваться оптимистичными проверками блокировки и предотвратить потерянные обновления.
Если вы хотите удалить много записей, тогда вопрос массового удаления будет более уместным. Вы даже можете запустить запрос SQL DELETE, который вы упомянули. Именно поэтому JPA и Hibernate позволяют использовать собственные SQL-запросы в любом случае.