강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của ruddns02086591
ruddns02086591

câu hỏi đã được viết

Phát triển ứng dụng web dựa trên Spring và JPA

Kiểm tra email xác nhận đăng ký

회원가입 인증 메일 확인

Viết

·

499

0

accountService 애서

processNewAccount 을

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

로하면

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

@Transactional 를 사용하지않고

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

javaspringspring-bootjpathymeleaf

Câu trả lời 2

0

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

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

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

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

 

예를 들어서

em.persist(entity1)

em.flush

em.persist(entity2);

 

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

이점 참고 바랍니다.

 

0

whiteship님의 프로필 이미지
whiteship
Người chia sẻ kiến thức

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

Hình ảnh hồ sơ của ruddns02086591
ruddns02086591

câu hỏi đã được viết

Đặt câu hỏi