[JPA] 엔티티 매니저와 엔티티 영속성 관리

enjoy89·2023년 11월 30일
1
post-thumbnail
post-custom-banner

엔티티 매니저(Entity Manager)

  • 지난 글에서 공부한 영속성 컨텍스트는 눈에 보이지 않는 논리적인 개념이다. 실제는 엔티티 매니저를 통해서 영속성 컨텍스트에 접근할 수 있다.
  • 엔티티 매니저는 엔티티 객체를 저장, 수정, 삭제하고 조회하는 등 엔티티의 생명주기를 관리하는데 중요한 역할을 한다.




엔티티 생명주기



비영속(new / transient) 상태

  • 엔티티 객체가 생성되었지만, 아직 JPA에 의해 관리되고 있지 않은 상태
  • DB에 저장되지 않았으며, 영속성 컨텍스트에 속하지 않는다.
//객체를 생성한 상태(비영속)
Member member = new Member();
member.setId("member1");
member.setUsername("회원1");



영속(managed) 상태

  • 엔티티 매니저를 통해 엔티티가 영속성 컨텍스트에 저장되어 있는 상태
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();

//객체를 저장한 상태(영속)
em.persist(member);



준영속(detached) 상태

  • 영속 상태의 엔티티가 영속성 컨텍스트에서 분리되어 있는 상태
  • 트랜잭션이 종료되거나 detach() 를 호출하면 엔티티는 준영속 상태가 된다.
//회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태
em.detach(member);



삭제(removed) 상태

  • 엔티티 매니저를 통해 엔티티가 삭제되어 데이터베이스에서 삭제되는 상태
//객체를 삭제한 상태(삭제)
em.remove(member);



생명주기 관리

  • 영속성 컨텍스트는 엔티티의 영속 상태를 추적하고 엔티티의 상태 변화를 감지한다.
  • persist(), merge(), remove() 등의 메서드를 통해 엔티티를 영속성 컨텍스트에 추가, 갱신, 삭제할 수 있다.
  • 엔티티 매니저가 트랜잭션을 시작하면, 영속성 컨텍스트가 활성화 되고 트랜잭션이 종료될 때 영속성 컨텍스트는 플러시(flush)되어 데이터베이스에 변경 사항을 반영한다.
  • 트랜잭션이 롤백되면 영속성 컨텍스트의 상태로 롤백되어 원래 상태로 되돌아간다.

Rerference

[도서] 자바 ORM 표준 JPA 프로그래밍

profile
Backend Developer 💻 😺
post-custom-banner

0개의 댓글