인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트
JPA에서 가장 중요한 2가지
- 객체와 관계형 데이터베이스 매핑하기(Object Relational Mapping)
- 영속성 컨텍스트(JPA가 내부에서 어떻게 동작하는가)
EntityManagerFactory와 EntityManager
영속성 컨텍스트
- JPA를 이해하는데 가장 중요한 용어
- "엔티티를 영구 저장하는 환경"이라는 뜻
EntityManager.persist(entity);
DB에 저장 X, 영속성 컨텍스트를 통해서 Entity를 영속화한다.는 뜻. 좀 더 정확히 말해서 영속성 컨텍스트에 entity를 저장한다는 것
EntityManager? 영속성 컨텍스트?
- 영속성 컨텍스트는 논리적인 개념이고, 눈에 보이지 않는다
- EntityManager를 통해서 영속성 컨텍스트에 접근한다.
- J2SE 환경에서 EntityManager와 영속성 컨텍스트는 1:1관계이다.
- EntityManager가 Entity를 관리하는 '영속성 컨텍스트'라는 공간을 만든다고 생각하면 쉬움!
+) J2SE 환경? Java 2 Standard Edition. 기본적인 Java의 개발/실행 환경. Java 언어를 이용하여 어플리케이션, 애플릿 그리고 컴포넌트(Component) 등을 개발하고 실행할 수 있는 환경을 제공하는 플랫폼.
Entity의 생명주기
1. 비영속 (new/transient)
영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
객체 생성만 딱 했을 때, 영속성 컨텍스트 안에 있지 않음. > EntityManager의 관리를 받지 않는다. JPA와 관계 없다.
2. 영속(managed)
영속성 컨텍스트에 관리되는 상태
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
// 비영속
Member member = new Member();
member.setId(100L);
member.setName("HelloJPA");
//영속
System.out.println("=== BEFORE ===");
em.persist(member); // 이 때는 DB 단에 저장되지 않는다.
System.out.println("=== AFTER ===");
tx.commit(); // 트랜잭션을 커밋한 시점에 쿼리가 날아가서 DB에 저장이 된다.
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
3. 준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태
em.detach(member); // 회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태
4. 삭제(removed) : 삭제된 상태
em.remove(member);
'STUDY > JPA' 카테고리의 다른 글
[3-3] 플러시 (0) | 2023.07.05 |
---|---|
[3-2] 영속성 컨텍스트의 이점 (+Batch) (0) | 2023.07.04 |
[2-1] JPA 시작하기 (0) | 2023.06.30 |
[1-2] JPA 소개 (0) | 2023.06.29 |
[1-1] JPA가 나오게 된 배경 - SQL 중심적인 개발의 문제점 (0) | 2023.06.28 |