인프런 커뮤니티 질문&답변

이북자님의 프로필 이미지
이북자

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

JPA 적용1 - 개발

Test updateItem() 질문있습니다.

작성

·

293

2

안녕하세요 항상 좋은 강의 감사드립니다!

 

Jpa강의를 예전에 이미 다들었는데, 아직 실무에서 안쓰다보니 가물가물한 하네요..ㅜ

 

ItemRepositoryTest에 updateItem() 테스트를 보면 

save한후 update하고, 그후 find를 하게 되어있습니다. 

 

save()를 했을 때 영속 컨텍스트에 데이터가 저장되고,

update(), find()했을때는 영속 컨텍스트에서 데이터를 가져와 사용하고 커밋되기 전 롤백되기 떄문에 쿼리가 발생하지 않는 걸로 알고있습니다.

 

그런데 save()를 할때 insert 쿼리는 발생하는게 이해가 가질 않습니다. 

커밋을 하지않았기 때문에 insert쿼리는 발생하지 않고 영속 컨텍스트에만 저장되어 있어야 하지않나 생각이듭니다.. 

 

기초적인 질문이라 죄송합니다.

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 이진현님

em.persist()는 엔티티를 영속성 컨텍스트에 보관하는 기능입니다.

그런데 JPA에서 영속성 컨텍스트에 엔티티를 보관할 때 PK는 필수 입니다.

IDENTITY 전략의 경우 DB에 데이터를 넣어야 PK를 넣을 수 있기 때문에 이 경우에는 INSERT 쿼리가 em.persist() 시점에 발생합니다.

감사합니다.

이북자님의 프로필 이미지
이북자

작성한 질문수

질문하기