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

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