@트랜잭션 주석은 saveAndFlush에서 작동합니까?
저는 다음과 같은 구현이 있습니다.
@Transactional
public void saveAndGenerateResult(Data data) {
saveDataInTableA(data.someAmountForA);
saveDataInTableB(data.someAmountForB);
callAnAggregatedFunction(data);
}
public void saveDataInTableA(DataA a) {
tableARepository.saveAndFlush(a);
}
public void saveDataInTableA(DataB b) {
tableBRepository.saveAndFlush(b);
}
public void callAnAggregatedFunction() {
// Do something based on the data saved from the beginning in Table A and Table B
}
사용하는 것이 중요합니다.saveAndFlush데이터를 즉시 사용할 수 있도록 하기 위해callAnAggregatedFunction함수를 사용하여 집계 결과를 가져와 다른 테이블에 저장합니다.그래서 사용하지 않습니다.save내가 아는 바로는 트랜잭션을 데이터베이스로 플러시하지 않는 함수입니다.
단, 사용중인 것은@Transactional함수에 대한 주석saveAndGenerateResult이 함수로 실행한 데이터베이스 트랜잭션을 롤백하고 싶기 때문에 보통 이 함수가 있으면 보증됩니다.@Transactional메서드에 대한 주석.
이 경우의 시나리오는 무엇입니까?사용하고 있다saveAndFlush마지막 기능(예: 마지막 기능)인 경우 데이터를 데이터베이스 테이블로 즉시 플러시합니다.callAnAggregatedFunction)는 데이터를 테이블에 쓸 수 없습니다.테이블 A 및 테이블B의 이전 쓰기 조작은 롤백됩니까?
테이블 A와 테이블 B의 이전 쓰기 작업은 롤백됩니까?
네, 만약 당신이saveAndFlush()메서드는 자체 트랜잭션을 가집니다(즉, 와).propagation = REQUIRES_NEW).
만약 그것들이 모두 당신이 시작한 거래의 일부라면saveAndGenerateResult()데이터베이스 변경은 모두 장애 발생 시 롤백됩니다.
자세한 내용은 봄 - @Transactional - 백그라운드에서 무슨 일이 일어나나요?
언급URL : https://stackoverflow.com/questions/49855138/transactional-annotation-works-with-saveandflush
'codememo' 카테고리의 다른 글
| TypeScript에서 오브젝트에 속성을 동적으로 할당하려면 어떻게 해야 합니까? (0) | 2023.03.14 |
|---|---|
| Woocommerce - 플러그인에서 제품 유형을 확인하는 방법 (0) | 2023.03.14 |
| Oracle에 타임스탬프를 삽입하는 방법 (0) | 2023.03.14 |
| WP rest API 제목별 게시물 가져오기 (0) | 2023.03.14 |
| WordPress Customizer에서 특정 범주에 대한 옵션을 저장할 수 있습니까? (0) | 2023.03.14 |