在我的应用程序中,我有一个服务层,其中为此服务中的所有方法声明了spring事务边界。服务层内部联系dao。这里我的问题是如果在dao方法中指定getHibernateTemplate.flush(),它会立即更新数据库,或者直到服务层方法完成,它不会提交更改。请帮帮我。
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 ?
}
}
谢谢, 拉姆金。
答案 0 :(得分:9)
flush()
将对该hibernate会话管理的所有持久实体进行脏检查。如果持久化实体是脏的,那么hibernate将立即向DB发出UPDATE SQL。
但是,仅发出UPDATE SQL并不意味着数据实际上已保存到数据库中,您必须提交事务以确认实际将数据保存到数据库。因此,flush()
仅发出UPDATE SQL而不向DB提交任何COMMIT意味着如果以后发现任何错误,您可以回滚数据。
当您使用Spring来管理事务时,如果您的方法成功返回,事务将自动提交。如果在方法返回之前抛出任何异常,则事务将自动回滚。