인프런 커뮤니티 질문&답변

devskky님의 프로필 이미지

작성한 질문수

스프링과 JPA 기반 웹 애플리케이션 개발

회원 가입 인증 메일 확인

회원가입 인증 메일 확인

작성

·

396

0

accountService 애서

processNewAccount 을

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

로하면

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

@Transactional 를 사용하지않고

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

답변 2

0

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

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

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

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

 

예를 들어서

em.persist(entity1)

em.flush

em.persist(entity2);

 

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

이점 참고 바랍니다.

 

0

백기선님의 프로필 이미지
백기선
지식공유자

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

devskky님의 프로필 이미지

작성한 질문수

질문하기