Spring API上说nested在当前有事务时在事务中运行,其他和required一样(Execute within a nested transaction if a current transaction exists, behave like else.)这句话没看懂,required也是支持当前事务的啊,还是这个else并不是指 if a current transaction exists呢,得查查nested能不能自己新开一个事务。
Reference里说nested有多个savepoint,内部transaction可以回滚,required如果内部的transaction回滚会抛出异常。
他们的共同点,就是都可以嵌套,就算有子transaction的话,都运行在一个数据库事务中。
nested只能在JDBC3.0以上驱动的支持savepoint的 中使用
============
Execute within a nested transaction if a current transaction exists, behave like else.这句话好像是说当前有事务的话,则运行一个嵌套的事务吗。和required的“Support a current transaction”貌似有区别。required只是简单的support当前事务,并不代表会运行一个嵌套事务。根据reference的讲法,spring有一个逻辑事务的概念,nested运行一个逻辑上的嵌套事务,用savepoint回滚。而required虽然也是运行一个逻辑的嵌套事务,但是没有savepoint支持,回滚会被抛出异常,算不上完整的嵌套事务