SSH项目中save,delete,update无效解决方法

问题一:

SSH整合, Hibernate正确执行了save方法,但是数据没有保存到数据库

 1、Srping的配置文件里的Hibernate的属性配置必须加上

        <prop key="hibernate.connection.autocommit">true</prop>   如下图:

   

 2、Spring配置文件里加上模型驱动

    <tx:annotation-driven transaction-manager="transactionManager"/> 


 3、 在Service的实现类上添加事务注释@Transactional,如下:
@Transactional

public classUserServiceImplimplements UserService {}


 4、在DAO中获取session的时候应该采用sessionFactory.getCurrentSession();不能采用

    sessionFactory.openSession();,否则事务不能自动提交,同时session也不能自动关闭。

sessionFactory.getCurrentSession();和sessionFactory.openSession();的区别请看此博文:

问题二:

 

save()方法添加数据了,可是delete()和Update()方法总是没有效果

 原因:session是个一级缓存,当你save的时候,不会存放在缓存中,直接添加到数据库!
update和delete时,会先将session缓存的数据删除,然后提交到数据库,但是你这个时候
已经将session关闭了!要加session.flush() 
解决办法一:

 在delete()和update()方法后面加入flush()即可

  public void delete(Long id) {
    Object obj = findById(id);
    if(obj!=null)
    getSession().delete(obj);
    getSession().flush();
    }

   public void update(T entity) {
     getSession().update(entity);
     getSession().flush();

   }

 解决办法二:
 使用事务管理 @Transactional












 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值