transaction already active

这个问题是使用spring 事务管理时经常出现的错误,最开始时相当令我头疼,也不知道是哪里出现的问题。在网上找了一阵后,依然无解。意思就是说上一个事务处于激活状态中,不能开始新的数据库更新操作。

//slavesDao.delete(vsi) ;
    slavesDao.update(vsi) ;
    txn.commit();

如果只是执行完了第一行语句,然后根本就没有执行到txn.commit();这一步,那么要开始下一个事务就会出这样的错,所以我们一般应该检查自己的逻辑是否正确!

又出错,,,,

Session session = this.sessionFactory.getCurrentSession();
        session.saveOrUpdate(piano);

使用getCurrentSession()的情况下不需要commit
您调用SessionFactory时。getCurrentSession,如果不存在,它会创建一个新会话,否则使用当前休眠上下文中的相同会话。当事务结束时,它会自动刷新并关闭会话,因此您不需要在外部执行。
如果您在单线程环境中使用休眠,您可以使用getCurrentSession,因为与每次创建新会话相比,它的性能更快。
您需要向hibernate.cfg.xml添加以下属性才能使用getCurrentSession方法

posted @ 2020-03-26 12:04  两小无猜  阅读(775)  评论(0编辑  收藏  举报