По умолчанию, как вы говорите, Hibernate будет создавать экземпляры сущностей - в своем StatefulPersistenceContext
.Это делается для того, чтобы он соответствовал экземпляру, если он извлекается снова, и для отслеживания обновлений, готовых к следующему принятию или сбросу.
Наиболее очевидный способ избежать наращивания сеанса - начать новый сеанс., но это не всегда практично, например, из-за объема транзакций.
Лучшее решение в рамках одного сеанса - session.clear()
, которое отбрасывает любые экземпляры сущностей, которые были созданы в сеансе.Если в цикле также происходят обновления, вам нужно будет сделать session.flush()
перед clear()
, чтобы перенести все изменения в базу данных.
Другой вариант, по крайней мере, в пределахЧистая среда Hibernate (не JPA) представляет собой StatelessSession , которая не имеет StatefulPersistenceContext
, поэтому не собирается.Я пробовал это пару раз, но смущаюсь рекомендовать его - он, кажется, менее широко используется, поэтому труднее находить неисправности в Интернете.