如何创建事务来保存数据库中的多个对象?

时间:2015-02-05 20:19:36

标签: spring-mvc spring-boot transactional

我的Spring Boot应用程序中有一个控制器。 控制器从POST请求接收json。解析json我需要在数据库中创建三个新对象:

    accountRepository.save(account);
    containerRepository.save(userContainer);
    containerRepository.save(operatorContainer);

将这三个对象保存到数据库应该在一个事务中。 现在我在控制器方法上使用@Transactional。然而,通过@Transaction注释标记控制器似乎是不好的做法。 我应该创建服务,我将保存作为参数传递的三个对象并标记服务@Transactional? 最好的方法是什么?也许有人可以提供一个例子吗?

1 个答案:

答案 0 :(得分:4)

最佳位置是服务层中的方法。

@Service
public class MyService {

  @Autowired
  AccountRepository accountRepository;

  @Autowired
  ContainerRepository containerRepository;

  @Transactional
  public void save(Account account, Container userContainer, Container operatorContainer) {
    accountRepository.save(account);
    containerRepository.save(userContainer);
    containerRepository.save(operatorContainer);
  }
}

然后在控制器中连接服务。