유져가 회원가입을 완료한 후에 마이페이지 같은 곳에서 자신의 정보를 바꾼다고 가정
JPA는 이러한 update 에서 어떠한 과정을 거치는가에 대해 정리해보려 한다
예시 코드
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor // final에 해당되는 필드에 대한 constructor 자동 생성 어노테이션
public class UserService{
private final UserRepository userRepository;
@Autowired // constructor injection
public UserService(UserRepository userRepository){
this.userRepository = userRepository;
}
@Transactional
public void update(Long id, String name){
User user = userRepositroy.findById(id);
user.setName(name);
}
}
update service 메소드를 살펴보며 JPA 의 동작과정 이해하기
- findById - id 값을 가지고 영속성 컨텍스트 1차 캐시를 살펴본다
- findById - 영속성 컨텍스트에 영속 entity가 없다면 DB에서 가져와 영속 entity로 만든다
- setName - 영속 entity에 변화를 주어서 JPA가 변경 감지를 하도록 한다
- transaction - 변경이 감지되고 spring AOP가 동작하면서 transaction이 끝나는 시점에서 영속성 컨텍스트에서 flush가 발생
- transaction - transaction commit
'Spring > boot' 카테고리의 다른 글
[Spring Boot] 개발 단계에서 테스트를 위한 DB data 만들기 (0) | 2022.02.18 |
---|---|
[Spring Boot] Rest Controller DTO 의 필요성 (0) | 2022.02.15 |
Spring Boot - Test 코드 작성 (0) | 2022.01.04 |
spring boot Service 코드 repository injection관련 (0) | 2021.12.27 |
spring JPA 엔티티 Entity 어노테이션 정리 (0) | 2021.12.24 |