Java/JPA

[JPA] Entity Manager

웅지니어링 2025. 2. 12. 17:10

* Entity Manager란?

Entity Manager는 내부적으로 영속성 컨텍스트를 유지하며, 현재 관리 중인 엔티티 객체들을 캐싱하고 관리한다.

 

* Entity Manager 생성 과정

 

1. 엔티티 매니저 팩토리 생성

JPA를 시작하기 위해 persistence.xml의 설정 정보를 사용해서 엔티티 매니저 팩토리를 생성해야 한다.

EntityManagerFactory emf = Persistence.createEntityManagerFactory("test");

엔티티 매니저 팩토리를 생성할 때, JPA 구현체에 따라서 데이터베이스 커넥션 풀도 생성할 수 있으므로 비용이 크다. 따라서 엔티티 매니지 팩토리는 애플리케이션 전체에서 딱 한번만 생성하고 공유해서 사용해야 한다.

 

2. 엔티티 매니저 생성

EntityManager em = emf.createEntityManager();

엔티티 매니저 팩토리에서 엔티티 매니저를 생성한다. 이 엔티티 매니저를 사용해서 엔티티를 데이터베이스에 CRUD 할 수 있다. 한편, 엔티티 매니저는 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드 간에 공유하거나 재사용하면 안된다.

 

3. 종료

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

사용이 끝난 엔티티 매니저와 엔티티 매니저 팩토리는 종료해야 한다.

 

* 엔티티 매니저가 스레드 간에 공유하거나 재사용하면 안되는 이유?

여러 스레드가 동일한 EntityManager 인스턴스를 공유하면, 각 스레드에서 수행된 변경 사항이 다른 스레드의 영속성 컨텍스트에도 영향을 미칠 수 있다. 즉 트랜잭션 중 하나가 커밋되면서 다른 트랜잭션에서 원하는 결과가 나올 위험이 있다는 것이다. 따라서 thread-safe 하지 않으므로 동시성 문제가 발생할 수 있다.

 

  

'Java > JPA' 카테고리의 다른 글

[JPA] JPA 기초 및 개념  (0) 2025.02.11