Мне нужно l oop через некоторый больший набор данных, поэтому я возвращаю Stream
из вызова хранилища следующим образом:
@QueryHints(value = {
@QueryHint(name = HINT_FETCH_SIZE, value = "500"),
@QueryHint(name = HINT_CACHEABLE, value = "false"),
@QueryHint(name = READ_ONLY, value = "true")
})
@Query("from StoreEntity")
Stream<StoreEntity> getAll();
Я также использую @Transactional(readOnly = true)
в сервисе учебный класс. Тем не менее, я получаю OutOfMemoryException
при обработке только 30 000 объектов. Я не создаю никаких списков, даже если я делаю только операции только для чтения на StoreEntity
, я получаю OOM. Все ли объекты в транзакции так или иначе кэшируются JPA / Hibernate? Это для меня единственная значимая причина, почему она не освобождает память. Как бы вы решили это, пожалуйста?