一、
问题描述:
简单的SSH结构,已经生成了HBM和POJO,单元测试中调用AbstractHibernateDao(extends HibernateDaoSupport)执行CRUD,目前Junit单元测试绿灯通过,但检查控制台发现没有delete脚本输出,再检查数据库,记录依然在。
PS:我怀疑是delete后,session没有flush,在AbstractHibernateDao执行delete时候加了flush还是没有成功;
ok,问题解决了,确实是session没有flush的问题。我修改了单元测试的父类中的tearDown方法,把代码贴出来,供遇到同类问题的朋友参考;
- protected void tearDown() throws Exception
- {
- if (bHoldSession)
- {
- SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager.unbindResource(sessionFactory);
- sessionHolder.getSession().flush();
- SessionFactoryUtils.releaseSession(sessionHolder.getSession(), sessionFactory);
- }
- context = null;
- super.tearDown();
- }
二、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()的