getHibernateTemplate().delete未生效各种解决方案(从网上总结的)

一、

问题描述:
简单的SSH结构,已经生成了HBM和POJO,单元测试中调用AbstractHibernateDao(extends HibernateDaoSupport)执行CRUD,目前Junit单元测试绿灯通过,但检查控制台发现没有delete脚本输出,再检查数据库,记录依然在。

PS:我怀疑是delete后,session没有flush,在AbstractHibernateDao执行delete时候加了flush还是没有成功;

ok,问题解决了,确实是session没有flush的问题。我修改了单元测试的父类中的tearDown方法,把代码贴出来,供遇到同类问题的朋友参考;


Java代码   收藏代码
  1. protected void tearDown() throws Exception  
  2. {  
  3.     if (bHoldSession)  
  4.     {  
  5.         SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager.unbindResource(sessionFactory);  
  6.         sessionHolder.getSession().flush();  
  7.         SessionFactoryUtils.releaseSession(sessionHolder.getSession(), sessionFactory);  
  8.     }  
  9.     context = null;  
  10.     super.tearDown();  
  11. }

二、ser user = (User)this.hibernateTemplate.load(User.class, id);
    System.out.println(user.getLoginName()+"--------------delete----------hibernatetemplate:"+this.hibernateTemplate);
    this.hibernateTemplate.delete(user);
    System.out.println("-----------------------------delete");

   在执行了this.hibernateTemplate.delete(user);没发出HQL语句,也没有任何反应,数据还是没删除成功


误人子弟了!

不是提交事务才行,在spring封装的hibernate中,每执行一次save(),delete()....这类的操作,都要执行这句 session.flush();
你说的提交事务,其实也是执行了session.flush()的

你可能感兴趣的:(SSH)