작성
·
397
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()니까 그렇게 쓰셔도 될 것 같네요.