-
-
안녕하세요? 오늘은 JPA에서 가장 중요한 개념인, 영속성에 관련해서 알아보도록 하겠습니다.
JPA를 공부할 때 가장 중요한 점은,
1. 객체와 관계형 데이터베이스를 매핑하는 것
(Object Relational Mapping)
2. 영속성 컨텍스트를 이해하는 것
이라고 볼 수 있습니다.
JPA에서는, 요청이 올때마다, EntityManagerFactory를 통해서 EntityManager를 생성을 해주게 됩니다.
EntityManager에서는 이제, 데이터 커넥션을 사용해서 DB를 사용하게 됩니다.
엔티티의 생명주기는 크게 비영속 / 영속 / 준영속 / 삭제 로 나눠집니다.
그럼 각각에 대해서 자세히 알아보도록 하겠습니다.
-
비영속
: 영속성 컨텍스트와 전혀 관계가 없는 상태
// 객체를 생성만 한 상태(비영속)
Entity entity = new Entity();
entity.setId("entityA");
entity.setUsername("엔티티A");
-
영속
: 영속성 컨테스트에 저장 > 관리되는 상태 : 엔티티가 영속성 컨테스트에 의해 관리가 됨 : 이때 DB에 저장이 되지 않음 |
그렇다면,
영속성 컨텍스트 란?
: 엔티티를 영구 저장하는 환경
(논리적인 개념)
EntityManager.persist(엔티티)를 실행 했을 때, 실제로는 DB에 저장이 바로 이루어지는 것이 아니라, 영속성 컨텍스트를 통해서 엔티티를 영속화하게 된다.
DB 저장 시점은, 트랜잭션의 커밋 시점으로 볼 수 있다.
// 객체를 생성한 상태(비영속)
Entity entity = new Entity();
entity.setId("entityA");
entity.setUsername("엔티티A");
EntityManagerFactory emf = Persistence.createEntityManagerFactory("유닛명");
EntityManager em = emf.createEntityManager();
// 객체를 저장한 상태(영속)
em.persist(entity);
em.getTransaction().begin();
-
준영속
: 영속성 컨텍스트에 저장이 되었다가 분리된 상태
EntityManagerFactory emf = Persistence.createEntityManagerFactory("유닛명");
EntityManager em = emf.createEntityManager();
// 회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태
em.detach(entity);
-
삭제
: 삭제된 상태
: DB에서도 실제데이터가 삭제된다.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("유닛명");
EntityManager em = emf.createEntityManager();
// 객체를 삭제한 상태
em.remove(entity);
그렇다면, 영속성 컨텍스트의 이점은 뭘까요?
그건 바로, 1차 캐시, 동일성 보장 (Identity), 트랜잭션을 지원하는 쓰기 지연, 변경 감지, 지연 로딩 등등이 존재합니다.
오늘은 JPA에서 가장 중요한 개념인, 영속성에 관련해서 알아보았습니다.
다음 포스팅에서는, 영속성 컨텍스트의 이점에 대해서 알아보도록 하겠습니다.
그럼 오늘도 즐거운 하루 되시길 바라겠습니다.
'프로그래밍 > Back-end' 카테고리의 다른 글
JPA 영속성 전이 CASCADE 고아 객체 (0) | 2024.10.15 |
---|---|
JPA 영속성 영속상태와 준영속상태 (0) | 2024.10.15 |
JPA 영속성 Flush (0) | 2024.10.15 |
JPA 영속성 컨텍스트의 장점에 대하여! (0) | 2024.10.15 |
JPA 데이터 타입과 기본 임베디드 컬렉션에 대하여! (0) | 2024.10.14 |
JPA 키 매핑 종류와 전략에 대해서! (0) | 2024.10.14 |
JPA 주요 매핑 어노테이션에 대해서! (0) | 2024.10.14 |
JPA 상속관계 매핑 MappedSuperclass (0) | 2024.10.11 |