EntityManager
🧩 EntityManager
정의
EntityManager는 JPA에서 엔티티를 저장, 조회, 수정, 삭제하는 핵심 인터페이스이다. 영속성 컨텍스트를 통해 엔티티의 생명주기를 관리하고 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);
}
⚠️ 주의사항
EntityManager는Persistence Context와 직접 연결된다.flush()는 DB 반영이지, 영속성 컨텍스트 초기화가 아니다.clear()는 관리 중인 엔티티를 모두 분리한다.merge()는 원본 객체를 그대로 관리하는 것이 아니라 병합된 새 관리 객체를 반환한다.- 보통
@PersistenceContext로 주입하는 방식이 안전하다.
📌 정리
EntityManager는 JPA의 핵심 엔티티 관리 인터페이스다.- 영속성 컨텍스트를 통해 조회, 저장, 수정, 삭제를 수행한다.
@PersistenceContext를 통해 주입하는 방식이 일반적으로 권장된다.
댓글남기기