在学spring,看到一个帖子,问HibernateTemplate是不是自己有事务,大家都说有。如果有,那为什么需要在Spring的配置文件中配置事务呢?看了看HibernateTemplate的代码,也看不出来

故请教大家:
HibernateTemplate中有事务处理吗?
HibernateTemplate中有事务处理,那Spring为何还需配置事务?

HibernateTemplate一般出现在DAO层。他所谓的事务一般都是针对单条SQL而言。因为HibernateTemplate中的方法都是一次执行一条SQL的。
而spring中的事务是针对service层的,因为在业务逻辑层,设计到业务时都是调用DAO层的基本方法组合实现逻辑的,比如转账,需要先扣,在增,此时对于service这属于一个动作。

举个例子吧。

比如执行单条SQL: UPDATE table_name SET name = 'xxx' WHERE id = ?

使用HibernateTemplate的update方法时,如果执行错误那么数据库是可以回滚的。

如果执行多条SQL:UPDATE table_name SET name = 'xxx' WHERE id = ?;UPDATE table_name1 SET name = 'xxx' WHERE id = ?

使用HibernateTemplate时,需要执行两次update方法,但此时就会出现错误,HibernateTemplate是不会对两条SQL的结果回滚的,可能会操成一条成功一条失败,此时就需要spring的事务了。因为两条以上的SQL就算是业务逻辑的。

HibernateTemplate没有设置session的事务属性,HibernateTemplate的作用是保证session能够正确的打开和关闭,避免手工管理session带来的问题。
可以通过下面的方式处理事务

getHibernateTemplate().execute(new HibernateCallback() { 
              public Object doInHibernate(Session session) throws HibernateException, SQLException { 
                 session.connection().setAutoCommit(false); 
                  
                  Student stu1=new Student(); 
                 stu1.setName("aaaa");                 
           session.save(stu1); 
                  
                 Student stu2 = new Student(); 
                 session.save(stu2); 
                  
                 session.flush();//向数据库发送sql 
                 session.connection().commit(); 
                 return null
             
         }); 

转载于:https://blog.51cto.com/yjm199/1834453

HibernateTemplate相关推荐

  1. HibernateTemplate 的常见用法

    HibernateTemplate 提供了非常多的常用方法来完成基本的操作,比如增加.删除.修改及查询等操作,Spring 2.0 更增加对命名 SQL 查询的支持,也增加对分页的支持.大部分情况下, ...

  2. spring入门(12)-spring与hibernate整合完成增删改查的操作(继承HibernateDaoSupport调用hibernateTemplate类)

    本文是在上一篇博文的基础之上,通过继承HibernateDaoSupport调用hibernateTemplate类,只要将UserDaoImpl.java改为继承HibernateDaoSuppor ...

  3. spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)

    今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...

  4. HibernateTemplate、HibernateDaoSupport两种方法实现增删改查Good

    Spring+Hibernate两种方法实现增删改查 首先,定义一个Customer的bean类,设置好Customer.hbm.xml文件.再定义好一个Dao接口.准备好一个jdbc.propert ...

  5. spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题

    Xml代码   pring提供访问数据库的有三种方式: HibernateDaoSupport,HibernateTemplate(推荐使用),jdbcTemplate HibernateTempla ...

  6. hibernateTemplate的load方法

    hibernateTemplate的load方法采用延迟加载,所以应当注意. 如果配置不当,采用此方法获取对象,往往会出现异常: javax.servlet.ServletException: org ...

  7. Java程序员从笨鸟到菜鸟之(八十一)细谈Spring(十)深入源码分析Spring之HibernateTemplate 和HibernateDaoSupport

    spring提供访问数据库的有三种方式: HibernateDaoSupport HibernateTemplate(推荐使用) jdbcTemplate(我们一般不用) 类所在包: Hibernat ...

  8. Spring之HibernateTemplate 和HibernateDaoSupport

    spring提供访问数据库的有三种方式: HibernateDaoSupport HibernateTemplate(推荐使用) jdbcTemplate(我们一般不用) 类所在包: Hibernat ...

  9. HibernateTemplate的一些常用方法总结

    1:get/load存取单条数据 public Teacher getTeacherById(Long id) { return (Teacher)this.hibernateTemplate.get ...

最新文章

  1. XGBoost类库使用小结
  2. 互联网元年:如何提升自己?
  3. 【转】Matlab axis用法
  4. Python学习13 异常处理机制
  5. ORA-01113:文件n需要介质恢复 (转载)
  6. Java中方法的重载(overload)与重写/覆写(override)
  7. 【工艺】集成电路中的工艺及其方式
  8. php微信实现红包雨,怎么制作微信红包雨(微信红包雨特效)
  9. 2022QS榜单发布!计算机专业排名MIT霸榜,清华排15,北大跌出TOP20
  10. win7开启uasp协议_Windows To Go安装使用手记
  11. 服务器卡logo显示2f,战争机器4卡LOGO界面解决办法
  12. 餐厅预订系统有哪些?餐厅预订系统怎么选择?
  13. 临时或永久修改cgroup和Cgroup 入门教程:cpuset
  14. 决策树分类算法的案例(代码实现及运行测试)
  15. 微博短链接生成 php,新浪微博API生成短链接
  16. 如何识别骗子广告联盟,骗子广告联盟常用手段
  17. 机器人单关节力矩控制
  18. 电子班牌系统服务器,智慧校园电子班牌系统解决方案
  19. Mac OS terminal 查看内存使用情况的命令
  20. 模板卷积Template Convolution

热门文章

  1. 初步建立了完整AI产业链,我国AI域累计融资世界第一
  2. Yann LeCun:假如没有深度学习,Facebook就是尘埃
  3. 《用Python进行自然语言处理》第 4 章 编写结构化程序
  4. 2022年重大颠覆性科技创新趋势报告(完整版)
  5. 这些超级高效的人工神经元不使用电子?
  6. 一个诡异的循环:意识何以意识到意识自身?
  7. 人工智能正在推动芯片的复兴
  8. 《自然》:欧洲根据已知基因序列合成新冠病毒,助力疫苗开发
  9. Science | 谷岩/王朗团队揭示大脑中的免疫细胞竟是记忆遗忘的“主谋”
  10. Gartner预测:2019年七大AI科技趋势,百万行业将颠覆!