@Override
public Long deleteDiaryWithSubEntities(DiaryDeleteRequestDTO dto) throws TimeoutException {
removeDiaryWithSubEntities(dto.getDiaryId());
sendMessageToWriterService(dto.getWriterId(), dto.getDiaryId());
sendMessageToFindDiaryService();
return dto.getDiaryId();
}
@Transactional
private void removeDiaryWithSubEntities(Long diaryId) throws TimeoutException {
// db 로직
}
이 코드인 채로 도커 말아서 띄워봤더니, transactionRequiredException이 발생했다.
트랜잭션 붙였는데, 뭔 소린가 했다.
제목 그대로 @Transactional은 private에 붙이면 안된다.
왜냐하면 해당 어노테이션은 private method에서는 동작하지 않기 때문이다.
@Override
@Transactional
public Long deleteDiaryWithSubEntities(DiaryDeleteRequestDTO dto) throws TimeoutException {
removeDiaryWithSubEntities(dto.getDiaryId());
sendMessageToWriterService(dto.getWriterId(), dto.getDiaryId());
sendMessageToFindDiaryService();
return dto.getDiaryId();
}
private void removeDiaryWithSubEntities(Long diaryId) throws TimeoutException {
// db 로직
}
public으로 노출되있는, 최상위 메서드에 @Transactional을 부착했다.
https://netframework.tistory.com/entry/Spring-Transactional%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC