본문 바로가기

Spring&IntelliJ

JPA 영속객체의 라이프사이클

출처: https://www.youtube.com/watch?v=vMdpdui4VkA&list=PLOSNUO27qFbvzGd3yWbHISxHctPRKkctO&index=8

 

 

위와 같이 persist로 영속성 컨텍스트에 등록한 후에 바로 detach하여 영속성 컨텍스트에서 제거하여도 insert 쿼리는 DB를 향해 나감. 콘솔창에 출력되는 순서는 select, foundCustomer출력정보, insert순임. 아래 그림 참고

(이 순서를 깔끔하게 이해하기 위해서는 아래와 같이 생각하면 좋을 것 같다. persist하면 insert에 관한 쿼리가 1차 캐쉬뿐만이 아니라 쓰기지연 sql저장소에도 담긴다. 그러다 detach되면 1차 캐쉬에서는 삭제된다. 그후 em.find()로 select 쿼리를 바로 DB에 날림(select는 항상 최우선 되므로 가장 먼저 실행되고 또한 1차 캐쉬에서는 사라졌으므로)  => foundCustomer출력 => commit으로 쓰기 지연 SQL저장소에 있는 insert쿼리 날림.