Сегодня я натолкнулся на некоторый код, в котором хранится большой список объектов, которые, как ожидается, со временем будут расти. Список составляется кусками. Это хорошо документированный код, и причина, по которой приводится подход к фрагментам, заключается в уменьшении размера транзакций во избежание тайм-аутов транзакций.
Я обеспокоен тем, что объем транзакций не содержится в сохраненном фрагменте. Например ..
@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 () делать что-либо для предотвращения тайм-аута транзакции?