如果我只需要一个事务来处理所有事情,并且如果某个操作失败,我希望回滚所有的更改,那么我可以通过在第一个方法中使用1@Transaction来实现这一点.
是.如果在@Transactional
方法的堆栈中调用的任何较低的方法抛出未判断的异常,则所有操作都会回滚,并且不会在数据库中提交任何更改.这假设默认为Propagation
REQUIRED
.
向调用链下游的每个服务类方法添加@Transaction是不必要的,并且对上面的用例的性能不利吗?
要实现上面描述的事情,这是不必要的,尽管它确实不会增加任何开销.为简单起见,我建议将@Transactional
个注释放在同一层上.在开发团队中找到一个共识,尽管在REST控制器调用的服务层中定义权限是很常见的.也有一些例外,例如,将@Transactional(propagation = REQUIRES_NEW)
放在需要这样一个控件的较深层中是很常见的,嵌套事务不会影响外层事务,尽管它还取决于应用程序的分层方式.您可能还希望将注释放置到较低层,这些较低层由无法访问较高层的应用程序的不同部分调用.
当您想要向调用链下游的每个方法添加@Transaction以实现不同的结果时,有没有什么例子?
我不一定要注释every个方法,但我更愿意考虑我在上面描述的用例.