我尝试在我的项目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;
}
}
我的假设是你的 mysql 数据库启用了自动提交(可能是默认行为)
让我们尝试在 persistence.xml 中将属性“hibernate.connection.autocommit”设置为 false