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方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蓝牙ATT交互中的transaction mode active、execute、cancel和validate是用于确认模式下的事务控制命令,用于控制一个或多个ATT请求消息(Request)和响应消息(Response)之间的交互。 - Active:表示开始一个新的事务。客户端发送一个ATT请求消息后,服务器端会返回一个ATT确认消息表示已经接收到请求消息并开始处理,此时客户端可以发送多个ATT请求消息,这些消息之间共用同一个事务ID,直到客户端发送一个Execute Request消息来触发事务的结束。 - Execute:表示结束一个事务并执行所有已经准备好的写入操作。客户端发送一个Execute Request消息后,服务器端会执行所有已经准备好的写入操作,并返回一个Execute Response消息表示操作已经完成。 - Cancel:表示取消所有已经准备好的写入操作。客户端发送一个Execute Request消息后,服务器端会取消所有已经准备好的写入操作,并返回一个Execute Response消息表示操作已经完成。 - Validate:表示验证所有已经准备好的写入操作。客户端发送一个Validate Request消息后,服务器端会验证所有已经准备好的写入操作是否合法,并返回一个Validate Response消息表示验证结果。如果验证失败,则不会执行任何写入操作。 这四个命令通常用于控制一个或多个ATT请求消息和响应消息之间的交互,尤其是在写入多个属性值时非常有用。使用这些命令可以将多个请求和响应消息组织成一个事务,并保证事务的原子性和一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值