12.5. Jakarta Persistence EntityManager

Jakarta Persistence 엔터티 관리자는 지속성 컨텍스트에 대한 연결을 나타냅니다. 엔터티 관리자를 사용하여 지속성 컨텍스트에서 정의한 데이터베이스에 대해 읽고 쓸 수 있습니다.

지속성 컨텍스트는 javax.persistence 패키지의 Java 주석 @PersistenceContext 를 통해 제공됩니다. 엔터티 관리자는 Java 클래스 javax.persistence.EntityManager 를 통해 제공됩니다. 관리 빈에서 EntityManager 인스턴스는 다음과 같이 삽입할 수 있습니다.

예제: 엔터티 관리자 주입

@Stateless
public class UserBean {
    @PersistenceContext
    EntityManager entitymanager;
    ...
}

12.5.1. Application-Managed EntityManager

애플리케이션 관리 엔터티 관리자는 기본 지속성 프로바이더인 org.hibernate.jpa.HibernatePersistenceProvider 에 직접 액세스할 수 있습니다. 애플리케이션 관리 엔터티 관리자의 범위는 애플리케이션이 생성되고 애플리케이션에서 종료될 때까지 지속될 때의 범위입니다. @PersistenceUnit 주석을 사용하여 애플리케이션 관리 엔터티 관리자를 반환하는 javax.persistence.EntityManagerFactory 인터페이스에 지속성 유닛을 삽입할 수 있습니다.

애플리케이션이 특정 지속성 유닛의 EntityManager 인스턴스 전체에 분산되지 않은 지속성 컨텍스트에 액세스해야 하는 경우 애플리케이션 관리 엔터티 관리자를 사용할 수 있습니다. 이 경우 각 EntityManager 인스턴스는 격리된 새 지속성 컨텍스트를 생성합니다. EntityManager 인스턴스 및 관련 PersistenceContext 는 애플리케이션에서 명시적으로 생성 및 제거됩니다. EntityManager 인스턴스가 스레드 보안이 아니므로 EntityManager 인스턴스를 직접 주입할 수 없는 경우에도 애플리케이션 관리 엔터티 관리자를 사용할 수 있습니다. EntityManagerFactory 인스턴스는 스레드 보안입니다.

예제: 애플리케이션 관리 엔터티 관리자

@PersistenceUnit
EntityManagerFactory emf;
EntityManager em;
@Resource
UserTransaction utx;
...
em = emf.createEntityManager();
try {
    utx.begin();
    em.persist(SomeEntity);
    em.merge(AnotherEntity);
    em.remove(ThirdEntity);
    utx.commit();
}
catch (Exception e) {
    utx.rollback();
}