2017-05-15 7 views
1

여러 테이블에 데이터를 삽입해야하는 시나리오가 있습니다. 하나 개의 쿼리가 실패하면 내가 마지막으로 실행 된 쿼리를 롤백 할스프링에서 데이터 일관성 유지

처음 삽입이 실행 및 제 2 삽입 후 첫 삽입은 롤백됩니다 실패 할 경우 먼저 삽입이 실패 할 경우 내 서비스 방법은 내가 원하는

@Service 
@Transactional 
public class ServiceNameImpl implements ServiceName{ 
    @Autowired 
    private ABCRepository abcRepository; 

    @Autowired 
    private BCDRepository bcdRepository; 

    @Override 
    public SChResource save(SchData schData){ 
     SchSch sch = new SchSch(); 
     Contact con = new Contact(); 
     sch.setName(schData.getName()); 
     abcRepository.save(sch); --first insertion 
     con.setAddress(schData.getAddress()); 
     bcdRepository.save(con); --second insertion 
     return null; 
    } 
} 

이며, 두 번째 삽입이 실행되면 두 번째 삽입이 롤백됩니다.

내가 무엇을해야하는지 제안하십시오.

+0

'save()'메소드를 트랜잭션으로 만들고 싶습니다. – Kayaman

+0

당신의 서비스가'@ Transactional'이라면 이미 작동 할 것입니다. 작동하지 않는다면이 질문은 당신의 질문에 대답하기에는 너무 적은 정보를 포함하고 있습니다. –

+0

@M. Deinum @Transaction (readOnly = true) 또는 @Transactional (readOnly = false)을 사용해야하는 것과 혼동을 느낍니다.이 서비스 클래스에는 트랜잭션을 수행하지 않으려는 다른 메소드가 있기 때문에 – ankit

답변

0

스프링 데이터 Jpa를 사용하고 ABCRepositoryBCDRepository에서 JpaRepository 또는 슈퍼 또는 하위 클래스를 확장한다고 생각합니다.

@Configuration이있는 수업에 @EnableTransactionManagement을 추가해야합니다.

+0

그래, JpaRepository를 확장하고 있지만 언급 한 두 번째 요점을 얻지 못했습니다 – ankit

+0

EnableTransactionManagement 주석을 사용하고 있습니까? 사용하지 않으면 작동 할 것입니다.이 주석은 Configuration 주석이있는 모든 클래스에서 사용할 수 있습니다. –

+0

applicationcontext.xml 파일에 주석이 달린 트랜잭션 활성화가 누락되었을 수 있습니다. '' –

0

조심해 @Transactional 조심해. javax.transaction이 아니라 org.springframework.transaction.annotation 패키지에서 사용해야합니다. 붙여 넣은 코드 스 니펫에는 나타나지 않지만 이전에이 오류가 발생했습니다. 그래서 이것이 여기에 해당한다고 생각한 것입니다.