Есть ли session.save () немедленная вставка? - PullRequest
2 голосов
/ 07 апреля 2011

... или он ждет, пока соответствующая транзакция будет зафиксирована?

Я использую HQL-запрос в цикле, подобном следующему:

tx.begin()
for(...)
{
    session.getNamedQuery(...).list()
    ...
    session.save(new MyEntity())
}
tx.commit()

Именованный запрос должен иметь возможность видеть объекты, которые были добавлены с помощью вызова сохранения.Будет ли так работать?

Ответы [ 2 ]

4 голосов
/ 07 апреля 2011

Зависит от режима сброса сеанса.Вы также можете вручную очистить его с помощью session.flush()

Режим очистки можно установить несколькими способами - session.setFlushMode(..), entityManager.setFlushMode(..) или с помощью конфигурации xml (org.hibernate.FlushMode).

Значением по умолчанию является AUTO:

Сеанс иногда сбрасывается перед выполнением запроса, чтобы гарантировать, что запросы никогда не возвращают устаревшее состояние.Это режим сброса по умолчанию.

0 голосов
/ 07 апреля 2011

Попробуйте, если нет, то позвоните

session.flush()

, чтобы отправить SQL в БД.В любом случае, оно не будет совершено до вызова

tx.commit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...