Contents
1. PC (Persistance Context)1. PC (Persistance Context)
1. 개념
2. 동작
user를 db에 저장하고자 하는 상황이다.
- respository에서 user는 현재 비영속 객체이다. 이때 user는 username, password, email만 가지고 있다.
- 이때 em.persist 메서드를 통해 user를 영속화 시키게 되면 pc에서의 user 객체는 영속 객체가 된다.
- PC에서 @ID(PK)를 체크하여 이 값이 null인지 확인한다. (= DB에 없음을 의미)
- user 객체를 DB에 저장한다.
- DB에 저장된 user 객체에는 id가 자동 생성된다.
- DB에 저장된 데이터와 user 객체가 동기화 되면서 null이던 id에 값이 들어온다.

3. 장점
- insert와 동시에 id값을 알 수 있다. 따라서 insert 이후 id를 찾기 위해 다시 조회할 필요가 없다
4. 코드로 확인해보기
- UserService 클래스에서
User user = joinDTO.toEntity();에서의 user는 비영속 객체이다. - 따라서 이때의 user 객체로 getId 메서드를 실행하면 id는 null로 값이 존재하지 않는다.
- UserRepository 클래스에서
em.persist(user);를 통해 DB에 저장되고 user가 영속화되어 영속 객체가 된다.
- 따라서
em.persist(user);이후 user는 DB와 동기화 되어 id 값을 가지게 된다.
- 다시 UserService 클래스에서 userRepository.save(user); 이후의 user는 id가 있는, 동기화 된 영속 객체이므로 이때의 객체로 getId 메서드를 실행하면 id는 값이 존재한다.
- UserService

- UserRepository

- 실행 결과






캐싱하면 select 없어
Share article