将需要操作更改数据库表的一段代码封装到一个方法中,方法加事务注解 : @Transactional(rollbackFor = Exception.class)
自定义一个异常类,再上面的方法中,如果由于业务逻辑需要回滚数据,在for循环更改数据库表的代码中try抛出这个异常并用catch捕获,然后在catch中手动回滚数据: TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
public class XXXException extends RuntimeException { /** * 异常code */ private String code; /** * 异常信息 */ private String message; private XXXException(){ } /** * 构造方法 * @param code * @param message */ public XXXException(String code, String message) { this.message = message; this.code = code; } }