티스토리 뷰
EntityManagerFactory
jpa에 사용되는 인터페이스로 EntityManager 인스턴스를 생성하고 관리하는 역할을 합니다.
EntityManagerFactory를 사용하는 이유
EntityManager 생성: EntityManagerFactory는 EntityManager 인스턴스를 생성합니다. EntityManager는 JPA 엔티티 관리를 위한 핵심 인터페이스입니다.
설정 관리: EntityManagerFactory는 데이터베이스 연결 정보, 트랜잭션 관리, 캐싱 등의 JPA 설정을 관리합니다.
성능 향상: EntityManagerFactory는 내부적으로 연결 풀링, 캐싱 등의 기능을 제공하여 애플리케이션 성능을 향상시킬 수 있습니다.
스레드 안전성: EntityManagerFactory는 스레드 안전하게 설계되어 있어, 여러 스레드에서 안전하게 사용할 수 있습니다.
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
// 엔티티 클래스
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private int price;
}
public class ProductService {
private final EntityManagerFactory entityManagerFactory;
public ProductService() {
// Persistence 유닛 이름으로 EntityManagerFactory 생성
this.entityManagerFactory = Persistence.createEntityManagerFactory("my-persistence-unit");
}
public void createProduct(String name, int price) {
// EntityManager 생성
EntityManager entityManager = entityManagerFactory.createEntityManager();
// 트랜잭션 시작
entityManager.getTransaction().begin();
// 엔티티 생성 및 저장
Product product = new Product();
product.setName(name);
product.setPrice(price);
entityManager.persist(product);
// 트랜잭션 커밋
entityManager.getTransaction().commit();
// EntityManager 종료
entityManager.close();
}
public void shutdown() {
// EntityManagerFactory 종료
entityManagerFactory.close();
}
}
Persistence.createEntityManagerFactory("my-persistence-unit") 메서드를 사용하여 EntityManagerFactory를 생성합니다.
이때, "my-persistence-unit"은 persistence.xml 파일에 정의된 persistence unit 이름입니다.
ProductService 클래스에서는 EntityManagerFactory를 통해 EntityManager를 생성하고, 엔티티 관리 작업(저장, 조회 등)을 수행합니다.
마지막으로 EntityManagerFactory를 종료하는 shutdown() 메서드를 제공합니다.
EntityManagerFactory는 애플리케이션 수명 주기 동안 한 번만 생성되고, 여러 스레드에서 안전하게 사용될 수 있습니다.