Мне нужно удалить миллионы строк из таблицы в EJB Timer.
Проблема заключается в том, что таймер имеет время ожидания транзакции 90 секунд, поэтому я должен разделить работу на куски размера укуса.
Поскольку я не знаю, сколько строк можно удалить за 90 секунд, алгоритм должен зацикливаться и удалять несколько строк за раз, пока время почти не истекло.
Проблема в том, что:
Как можно элегантно ограничить количество удаляемых строк в JPA?
Удаление выполняется для всех строк, имеющих отметку времени ранее определенной даты.
Полагаю, можно найти 1000-ую самую старую строку, а DELETE WHERE timestamp <= {1000th-oldest-row.timestamp}
Это, однако, не очень элегантно, и мне нужно было бы перейти к последнему ряду из 1000, чтобы получить метку времени.
Во-вторых, таймер должен снова сработать немедленно, если таблица не будет чистой после 90 секунд. Это легко решаемо, но опять же не очень элегантно.