Используйте 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();
}

Может кто-нибудь мне помочь?

0 ответов

Другие вопросы по тегам