Когда вы получаете пользователя из сеанса (с session.get()
, session.load()
, обходом ассоциации или запросом HQL или Criteria), любое изменение, внесенное в пользователя, будет зафиксировано, когда будет совершена окружающая транзакция (без каких-либо вызов save
, update
, saveOrUpdate
или merge
необходимо). Он не будет записан в базу данных (сброшен) немедленно, но будет при необходимости: перед фиксацией или перед выполнением запроса, результат которого может зависеть от сброса. Вам обычно не нужно заботиться.
Если под «зафиксировано в базе данных» вы имеете в виду фиксацию в терминах транзакции, то это невозможно. Изменения фиксируются, когда фиксируется окружающая транзакция.
Если вы хотите, чтобы конкретное обновление было зафиксировано за пределами текущей транзакции, вам необходимо выполнить обновление в другой транзакции, используя код, такой как код в ответе BobG, но помеченный @Transactional(propagation = Propagation.REQUIRES_NEW)
.
Может быть, вам следует объяснить более точно, что вы хотите сделать и почему вы хотите это сделать.