явный flush () в транзакционном методе обновит базу данных или нет - PullRequest
2 голосов
/ 15 октября 2011

в моем приложении у меня есть сервисный уровень, где граница транзакции пружины объявлена ​​для всех методов внутри сервиса.Сервисный уровень внутренне связывается с Дао.здесь мой вопрос, если указать getHibernateTemplate.flush () в методах dao, будет ли он немедленно обновлять db или пока метод уровня сервиса не завершит работу, он не зафиксирует изменения.Пожалуйста, помогите мне здесь.

class someservice{
   public void somemethod(){
     activitydao.save(domainobj);
   }
}
class ActivityDAO extends HibernateDaoSupport{
public void save(domainobj){
  getHibernateTemplate().save(domainobj);
  getHibernateTemplate().flush(); ----> will it update db immediately ?
}
}

Спасибо, Рамки.

1 Ответ

9 голосов
/ 15 октября 2011

flush() выполнит грязную проверку всех постоянных объектов, управляемых этим сеансом гибернации. Если постоянная сущность грязная, hibernate сразу же выдаст SQL-запрос ОБНОВЛЕНИЕ в БД.

Однако, просто выполнение SQL UPDATE не означает, что данные фактически сохранены в БД, вам необходимо зафиксировать транзакцию, чтобы подтвердить фактическое сохранение данных в БД. Таким образом, flush() только выдает SQL ОБНОВЛЕНИЯ без какого-либо COMMIT для БД, что означает, что вы можете выполнить откат данных, если позже будут обнаружены какие-либо ошибки.

Поскольку вы используете Spring для управления транзакцией, транзакция будет автоматически подтверждена, если ваш метод успешно завершится. В случае возникновения каких-либо исключений перед возвратом метода транзакция автоматически откатится.

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