Используйте QueryDSL JPAQuery для извлечения элемента по каждому фрагменту с блокировкой PESSIMISTIC
Я использую JPAQuery для получения записей для модификации, и я также хочу заблокировать их от других транзакций, указав LockModeType.PESSIMISTIC_WRITE.
Пока список результатов блокируется, я хочу получить меньшие фрагменты данных (1000 строк), чтобы предотвратить исключение OutOfMemoryError. Это потому, что в таблице могут быть сотни тысяч строк.
Я попытался написать такой запрос, но он немедленно заблокирует объект и вернет весь результат, поэтому у меня нет возможности разделить его на меньший размер.
@Override
@Lock(LockModeType.PESSIMISTIC_WRITE) // exclusive lock
public List<Order> getOrderListToSend(int productId) {
QOrder qOrder = QOrder.order;
return new JPAQuery<Order>(entityManager)
.from(qOrder)
.join(qOrder.product, QProduct.product)
.where(qOrder.product.id.eq(productId)
.and(qOrder.statut.eq(StatutOrder.PLANNED))
.and(qOrder.exported.eq(Boolean.FALSE)))
.fetch();
}
Может кто-нибудь мне помочь?