🧩 EntityManager

정의

EntityManagerJPA에서 엔티티를 저장, 조회, 수정, 삭제하는 핵심 인터페이스이다. 영속성 컨텍스트를 통해 엔티티의 생명주기를 관리하고 DB와의 동기화를 담당한다.

JPA에서 엔티티를 다룰 때 영속성 컨텍스트의 진입점이라고 볼 수 있다.

🧩 역할

  • 엔티티를 영속성 컨텍스트에 관리한다
  • 조회, 저장, 수정, 삭제를 수행한다
  • flush를 통해 DB와 동기화한다
  • 영속성 컨텍스트의 생명주기와 연결된다

🛠 주요 메서드

메서드 역할 동기화 여부 상태
persist() 엔티티를 영속 상태로 만든다 X managed
find() 기본 키로 엔티티를 조회한다 필요 시 캐시 우선 managed
merge() 준영속 엔티티를 다시 병합한다 X managed
remove() 엔티티 삭제를 예약한다 X removed
detach() 특정 엔티티를 분리한다 X detached
flush() 변경 내용을 DB에 반영한다 O managed 유지
clear() 영속성 컨텍스트를 비운다 X 모두 detached
refresh() DB 값을 다시 읽어 덮어쓴다 O managed 유지

🛠 주입 방법

EntityManager를 주입하는 방식에는 @Autowired@PersistenceContext가 있다.

@Autowired

@Autowired
EntityManager entityManager;

환경에 따라 관리가 불안정할 수 있어 일반적으로 권장하지 않는다.

@PersistenceContext

@PersistenceContext
EntityManager entityManager;

@PersistenceContext를 사용하면 JPA 환경과의 통합이 자연스럽고 트랜잭션 관리도 안정적이다.

🛠 사용 예시

@PersistenceContext
private EntityManager entityManager;

public void save(Member member) {
    entityManager.persist(member);
}

⚠️ 주의사항

  • EntityManagerPersistence Context와 직접 연결된다.
  • flush()는 DB 반영이지, 영속성 컨텍스트 초기화가 아니다.
  • clear()는 관리 중인 엔티티를 모두 분리한다.
  • merge()는 원본 객체를 그대로 관리하는 것이 아니라 병합된 새 관리 객체를 반환한다.
  • 보통 @PersistenceContext로 주입하는 방식이 안전하다.

📌 정리

  • EntityManager는 JPA의 핵심 엔티티 관리 인터페이스다.
  • 영속성 컨텍스트를 통해 조회, 저장, 수정, 삭제를 수행한다.
  • @PersistenceContext를 통해 주입하는 방식이 일반적으로 권장된다.

연결문서

태그: ,

카테고리:

업데이트:

댓글남기기