[JPA] 엔티티 매니저

짱챌·2025년 4월 18일

JPA

목록 보기
4/5
post-thumbnail

영속성 컨텍스트
기존에 영속성 컨텍스트에 대해 정리헀던 글을 첨부한다. 해당 글을 읽고 오면 이해해 더 도움이 될거라고 생각한다~

EntityManager

JPA Entity는 DB구조와 매핑되어 생성된다. Entity는 영속성 컨텍스트에 저장된다. 이런 Entity를 관리하는 게 EntityManager이다.
엔티티 매니저는 persist, merge, remove, close 메서드를 이용하여 엔티티의 상태를 다룬다.
뿐만 아니라, 1차 캐시로부터 엔티티를 조회(find)하거나, 쓰기 지연 저장소의 쿼리를 flush하여 DB와 동기화 시킨다.

persist()

엔티티를 영속 컨텍스트에 저장 후 INSERT 쿼리를 실행한다. 보통 커밋시점에 INSERT 쿼리를 실행하는데 (SEQUENCE) persist시점에 실행되는 경우도 있다(IDENTITY).

  • 한 트랜잭션 범위 내에서 실행되어야 한다.

merge()

준영속 상태의 엔티티를 영속 상태로 변경하거나, 영속 상태가 아닌 엔티티를 복사해서 영속 상태의 새 엔티티로 만든다.

  • 파라미터로 넘긴 엔티티는 영속되지 않고, 새로운 영속 엔티티가 반환된다.

remove()

엔티티를 영속 컨텍스트에서 삭제 후 DELETE 쿼리를 실행한다.

  • 트랜잭션 범위 내에서 실행되어야 하며, 트랜잭션이 commit 되는 시점에 delete 쿼리가 실행된다.

close()

EntityManager를 종료하여 내부 자원을 해제한다.

  • 영속성 컨텍스트를 사용할 수 없으며, 이후 작업은 에러를 발생시킨다.

find()

영속성 컨텍스트 또는 DB에서 엔티티를 조회한다.

  • 1차 캐시에 엔티티가 있는지 확인한다. 없을 경우 DB에서 조회한다.
  • 조회된 엔티티는 영속 상태가 된다

flush()

영속성 컨텍스트의 쓰기 지연 저장소에 모여있던 변경사항을 DB에 반영한다.

  • 트랜잭션을 commit하기 전 자동으로 호출된다.
  • 수동 호출도 가능하다 em.flusth()
profile
애옹: Magic Cat Academy

0개의 댓글