gpt4 book ai didi

hibernate - 事务方法中的显式 flush() 是否会更新数据库

转载 作者:行者123 更新时间:2023-12-02 06:41:09 24 4
gpt4 key购买 nike

在我的应用程序中,我有一个服务层,其中为该服务内的所有方法声明了 spring 事务边界。服务层内部联系dao。这里我的问题是,如果在 dao 方法中指定 getHibernateTemplate.flush(),它会立即更新 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 ?
}
}

谢谢,拉姆基。

最佳答案

flush() 将为该 hibernate session 管理的所有持久实体执行脏检查。如果持久实体是脏的,hibernate 将立即向数据库发出 UPDATE SQL。

但是,仅仅发出UPDATE SQL并不意味着数据真的保存到DB中,你必须提交事务才能确认数据真正保存到DB中。因此,flush() 仅发出 UPDATE SQL 而没有对数据库进行任何 COMMIT,这意味着如果以后发现任何错误,您可以回滚数据。

因为你使用Spring来管理事务,如果你的方法返回成功,事务会自动提交。如果在方法返回之前抛出任何异常,事务会自动回滚。

关于hibernate - 事务方法中的显式 flush() 是否会更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7775804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com