JPA - будет ли EntityManager.flush () предотвращать тайм-аут транзакции? - PullRequest
0 голосов
/ 01 октября 2019

Сегодня я натолкнулся на некоторый код, в котором хранится большой список объектов, которые, как ожидается, со временем будут расти. Список составляется кусками. Это хорошо документированный код, и причина, по которой приводится подход к фрагментам, заключается в уменьшении размера транзакций во избежание тайм-аутов транзакций.

Я обеспокоен тем, что объем транзакций не содержится в сохраненном фрагменте. Например ..

@Transactional
public void saveInChunks(List<MyEntity> bigList) {
    int chunks = (int) Math.ceil((double) bigList.size() / chunkSize);
    for (int i = 0; i < chunks; i++) {
      int startPosition = i * chunkSize;
      int endPosition = Math.min(bigList.size(), startPosition + chunkSize);
      save(bigList.subList(startPosition, endPosition));
      entityManager.flush();
    }
}

Все, что делается, - это вызов entityManager.flush () после каждого фрагментированного сохранения, но область транзакции фактически не сужается. Будет ли entityManager.flush () делать что-либо для предотвращения тайм-аута транзакции?

...