• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

회원가입 인증 메일 확인

23.04.25 17:28 작성 조회수 308

0

accountService 애서

processNewAccount 을

Account newAccount = saveNewAccount(signUpForm);;
newAccount.getGenerateEmailCheckToken();
accountRepository.flush();
sendSignUpConfirmEmail(newAccount);

로하면

@Transactional 을 메서드 상단에 선언을 안해도 해결이 가능한데요.

@Transactional 를 사용하지않고

강제로 플러시를 해준경우에 추후에 문제가 될만 소지가 있을까요?

답변 2

·

답변을 작성해보세요.

0

도루크막토님의 프로필

도루크막토

2023.08.31

먼저 jpa 에는 1차 캐시가 존재하는데요

동일 transaction 안에서 발생한 상태에서는 쓰기지연 으로

실제 save를 날려도 commit 시점에 데이터가 저장되게 됩니다.

flush를 사용하게되면 강제로 insert 합니다.

 

예를 들어서

em.persist(entity1)

em.flush

em.persist(entity2);

 

했을경우 flush를 안했을때는 insert가 나중에나중에 나가지만 flush를 하면 바로 실행됩니다.

이점 참고 바랍니다.

 

0

흠.. 글쎄요. 마치 트랜잭션 처리를 선언적으로 할 것이냐 코딩으로 할 것이냐의 선택 같은데요. 직접 관리하는 경우에 쓰라고 만들어둔게 flush()니까 그렇게 쓰셔도 될 것 같네요.