[JPA] EntityManager

Noah-wilson·2024년 12월 24일

JPA

목록 보기
3/10

EntityManager란?

EntityManager는 JPA(Java Persistence API)의 핵심 인터페이스 중 하나로 데이터베이스와의 통신과 엔티티(Entity)를 관리한다.
EntityManager는 영속성 컨텍스트와 1:1의 관계를 가진다.

EntityManager의 역할

  1. 영속성 컨텍스트(Persistence Context) 관리
    EntityManager는 각 트랜잭션 또는 작업 단위동안 하나의 영속성 컨텍스트를 유지하고 관리한다.
    영속성 컨텍스트는 해당 트랜잭션 내에서 관리되는 모든 엔티티를 포함한다.
  2. 엔티티의 생명주기(Entity Life Cycle)
    엔티티(Entity)는 비영속 (new/transient), 영속 (managed), 준영속 (detached), 삭제 (removed)의 생명 주기를 가진다.

•비영속 (new/transient)
영속성 컨텍스트와 전혀 관계가 없는 새로운 상태

Member member = new Member(); 
member.setId(1L); 
member.setUsername("회원1");

• 영속 (managed)
영속성 컨텍스트에 관리되는 상태

Member member = new Member(); 
member.setId(1L); 
member.setUsername("회원1");

EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
//객체를 영속성 텍스트에 저장한 상태(영속)
em.persist(member);

• 준영속 (detached)
영속성 컨텍스트에 저장되었다가 분리된 상태

em.detach(member); 

• 삭제 (removed)
영속성 컨텍스트에서 삭제된 상태

em.remove(member);

  1. 트랜잭션 처리
    EntityManager는 데이터를 처리할 때 영속성 컨텍스트를 통해 엔티티 객체를 관리하지만, 영속성 컨텍스트와 데이터베이스 간의 최종 동기화는 트랜잭션 커밋 시점에 발생한다.
    트랜잭션 없이 EntityManager를 사용하는 경우, 데이터베이스에 변경사항이 반영되지 않거나 예외가 발생할 수 있다.

  2. JPQL

EntityManager는 JPQL 쿼리를 실행하는 역할을 한다.

예시:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("examplePU");
EntityManager em = emf.createEntityManager();

em.getTransaction().begin();

List<Member> members = em.createQuery("select m from Member m", Member.class)
                         .getResultList();

em.getTransaction().commit();

em.close();
emf.close();

0개의 댓글