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

本文介绍了解决Hibernate在Spring环境中删除操作不生效的问题。通过在单元测试的tearDown方法中加入Session的flush操作,确保了数据库记录被正确删除。同时提供了具体的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、

问题描述:
简单的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()的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值