Я немного растерялся, когда в весеннем приложении очищается кэш первого уровня (сеанса гибернации?). Я выполняю очень долгую работу, которая читает много данных, и в какой-то момент у приложения заканчивается память.
Я предполагаю, что кешированный объект вызывает проблему.
Изначально я думал, что закрытие транзакции приведет к очистке кэша, и чтение записей из базы данных по одному в методе @Transactional(propagation=REQUIRES_NEW)
должно решить проблему.
Но, к сожалению, приложению все еще не хватает памяти.
Весь код может уже выполняться внутри транзакции. Использует ли Hibernate один и тот же кэш / сеанс для нескольких или вложенных транзакций?
Все мои выборы выполняются с помощью весенних репозиториев (поэтому я не использую менеджер сущностей напрямую).
Это единственный способ очистить кеш, вызвав метод session.clear () вручную или закрыв последнюю родительскую транзакцию?