2015-02-05 8 views
1

스프링 부트 애플리케이션에 컨트롤러가 있습니다. 컨트롤러가 POST 요청에서 json을 수신합니다.데이터베이스에 여러 개체를 저장하는 트랜잭션을 만드는 방법은 무엇입니까?

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

저장 데이터베이스에이 세 개의 객체가 하나의 트랜잭션에 있어야 : 나는 데이터베이스에 세 개의 새로운 개체를 만드는 데 필요한 JSON을 구문 분석. 지금은 컨트롤러 방법에 @Transactional을 사용하고 있습니다. 그러나 컨트롤러를 @Transaction 주석으로 표시하는 것은 나쁜 습관으로 보입니다. 인수로 전달 된 세 개의 객체를 저장하고 @Transactional 서비스를 표시하는 서비스를 생성해야합니까? 가장 좋은 방법은 무엇입니까? 누군가가 예제를 제공 할 수 있습니까?

답변

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); 
    } 
} 

그런 다음 컨트롤러에서 서비스를 연결하십시오.