Spring/JPA

(JPA) 영속성 컨텍스트의 개요

주누 2021. 3. 7. 21:58

영속성 컨텍스트란?

엔티티를 영구 저장하는 환경을 의미한다.

EntityManager.persist(entity); 는 데이터베이스에 저장하는 것이 아닌 엔티티를 영속화 한다는 것이다.

즉 영속성 컨텍스트에 엔티티에 저장하는 것이다.

 

영속성 컨텍스트에 접근하는 방법은 엔티티 매니저를 통해서 접근할 수 있다.

 

그렇다면 엔티티에 대해서 좀 더 자세히 알아보자!

 

엔티티의 생명주기는 어떻게 되는 것일까?

  • 비영속 : 영속성 컨텍스트와 관계가 없는 새로운 상태를 의미한다.
  • 영속 : 영속성 컨텍스트에 관리되는 상태를 의미한다.
  • 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태를 의미한다.
  • 삭제 : 삭제된 상태를 의미한다.

 

비영속

그냥 인스턴스만 생성하고 아무 작업을 하지 않은 상태를 의미한다.

Member member = new Member();
member.setId(100L);
member.setUserName("Junwoo");

 

영속

EntityManager entityManager = entityManagerFactory.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();

transaction.begin();

// 영속상태 시작
entityManager.persist(member);

 

위의 코드에서 entityManager.persist(member); 을 함으로서 이제 영속성 컨텍스트에 관리가 되는 상태가 된다.

이를 영속상태라고 한다.

 

데이터베이스에 저장되는 시점을 알아보기위해서 아래와 같이 영속성 컨텍스트를 설장하는 전 후 시점에 sout을 찍어보도록하자!

Member member = new Member();
member.setId(101L);
member.setName("HelloJPA");

System.out.println("*********Before*********");
entityManager.persist(member);
System.out.println("*********After*********");

persist시점에는 쿼리가 날아가지 않는다!

쿼리가 날아가는지점은 데이터베이스에 커밋하는 시점이다!

 

준영속

detach를 선언하면 영속성컨텍스트에서 지우는 작업이며 이제 영속성 컨텍스트와는 관계가 없게 된다.


References

www.inflearn.com/course/ORM-JPA-Basic/dashboard  

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔

www.inflearn.com

Code Link

github.com/mike6321/Spring-JPA/commit/2c3130ad3ba980fd20deb09cf89ba578b9a9da3d#diff-e953af095260d78d6cf2e694ed8cfb6d1b4a8384e1a0844f76ce9203354dcede

 

영속성 컨텍스트1 · mike6321/Spring-JPA@2c3130a

 

github.com