#java #hibernate
#java — язык #впадать в спящий режим #java #переход в спящий режим
Вопрос:
…или он ожидает, пока связанная транзакция не будет зафиксирована?
Я использую запрос HQL в цикле, подобном этому:
tx.begin()
for(...)
{
session.getNamedQuery(...).list()
...
session.save(new MyEntity())
}
tx.commit()
Именованный запрос должен иметь возможность видеть объекты, которые были добавлены с помощью вызова save. Будет ли это работать таким образом?
Комментарии:
1. Безусловно, самый простой способ выяснить, работает ли это.
Ответ №1:
Это зависит от режима сброса сеанса. Вы также можете вручную промыть его с помощью session.flush()
Режим промывки можно установить несколькими способами — session.setFlushMode(..)
, entityManager.setFlushMode(..)
или с помощью конфигурации xml ( org.hibernate.FlushMode
).
Значение по умолчанию равно AUTO
:
Иногда сеанс сбрасывается перед выполнением запроса, чтобы гарантировать, что запросы никогда не вернут устаревшее состояние. Это режим сброса по умолчанию.
Ответ №2:
Попробуйте, если это не так, затем вызовите
session.flush()
чтобы отправить SQL в базу данных. В любом случае, это не будет зафиксировано до тех пор, пока вызов
tx.commit()