java transaction.rollback() 不回滚数据库

问题描述 投票:0回答:1

我尝试在我的项目java上执行事务,我意识到所有事务都不会回滚数据库中的行。 这是一个本地项目(数据库是 phpmyadmin 上的 MySQL,所有表都在 innoDB 中)。

我尝试执行插入(使用事务),执行异常,然后回滚插入数据库。

这是我使用的区块交易的示例。

EntityManager em = EMF.getEM();
BasketService basketService = new basketService();
EntityTransaction transaction = em.getTransaction();

try{
  transaction.begin();
  Basket basket = new Basket();
  //set basket params.
  basketService.insert(em, basket);
  if(basket.getId() != 0) //if inserted.
    throw new Exception("fake error");
  transaction.commit();
}catch(Exception e){
  transaction.rollback();
  //print error.
}finally{
  if(transaction.isActive()) //security.
    transaction.rollback();
  em.close();
}

这是我使用的服务示例。

public class BasketService {
  public Basket insert(EntityManager em, Basket basket){
    em.persist(basket);
    em.flush();
    return basket;
  }
}
java jpa transactions entitymanager
1个回答
0
投票

我的假设是你的 mysql 数据库启用了自动提交(可能是默认行为)

让我们尝试在 persistence.xml 中将属性“hibernate.connection.autocommit”设置为 false

© www.soinside.com 2019 - 2024. All rights reserved.