多个@Transactional注释超过2种方法不起作用

Aka*_*lya 2 spring jpa transactions

我的交易有两种方法,如下所示

Class MyTransaction(){

@Transactional
public void initialTranx(){

  String userId = 500;
  // do some user specific activity
 updateUserBalance(500);
  // check user balance
}

@Transactional
private void updateUserBalance(int userId){
 // codes for updating balance to 400
}

}
Run Code Online (Sandbox Code Playgroud)

现在调用initialTranx()方法,此方法在内部调用私有方法updateUserBalance(userid),但在执行updateUserBalance方法后,balance不会更新.只有在完成提交的公共方法(父方法)事务之后.

在完成私有方法本身之后,我需要提交我的第二个方法的事务.

我正在使用mysql for DB和spring数据JPA.

请有人指导我这个.

hol*_*s83 5

  1. @Transactional不适用于私有方法,使用public.根据类代理策略,在同一个类中调用方法也可能不会触发事务.

  2. JPA不正式支持嵌套事务.它可能在某种程度上与Spring一起使用,但可能会发生奇怪的错误.

  3. 如果要在提交事务之前强制更改数据库,可以使用EntityManager.flush().