我有Spring服务。此服务从db获取现有订单并将其作为参数分配给用户。当订单ID等于4时,应该回滚该事务。不幸的是,它并没有发生。抛出RuntimeException,但更改将保存在数据库中。
这是我的配置:
@SpringBootApplication
@EnableTransactionManagement
public class TransactionsApplication {
public static void main(String[] args) {
SpringApplication.run(TransactionsApplication.class, args);
}
}
服务:
@Transactional
void reconnect(Order o, User u) {
o.setUser(u);
orderRepository.save(o);
if (o.getId() == 4L) {
throw new RuntimeException("Transaction should be aborted.");
}
}
我从REST控制器调用此方法:
@RequestMapping("/reconnect/{id}")
public Order reconnect(@PathVariable("id") Long id) {
Order order = orderRepository.findOne(id);
User user = userRepository.findOne(2L);
mainService.reconnect(order, user);
return order;
}