영속성 컨텍스트란?
엔티티를 영구 저장하는 환경을 의미한다.
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*********");
쿼리가 날아가는지점은 데이터베이스에 커밋하는 시점이다!
준영속
detach를 선언하면 영속성컨텍스트에서 지우는 작업이며 이제 영속성 컨텍스트와는 관계가 없게 된다.
References
www.inflearn.com/course/ORM-JPA-Basic/dashboard
Code Link
'Spring > JPA' 카테고리의 다른 글
(JPA) could not initialize proxy - no Session (1) (0) | 2022.11.19 |
---|---|
(JPA) 플러시와 준 영속 상태 (0) | 2021.03.10 |
(JPA) 영속성 컨텍스트 (1차 캐시, 동일성 보장, 지연로딩, 변경감지) (0) | 2021.03.07 |
(JPA) JPA를 사용해야하는 이유 (0) | 2021.03.07 |
(JPA) SQL 중심적인 개발의 문제점 (0) | 2021.03.04 |