스프링

[JPA] 영속성 관리[1]

zumsim 2024. 11. 25. 22:30
728x90
반응형
엔티티 매니저

 

엔티티 매니저는 엔티티를 저장, 수정, 삭제, 조회하는 등의 일을 처리한다. 엔티티를 관리자는 관리자인셈.

엔티티 매니저는 엔티티 매니저 팩토리에서 생성하여 사용한다.

 

 

영속성 컨텍스트

 

JPA를 이해하는데 가장 중요한 용어로 "엔티티를 영구 저장하는 환경" 이라는 뜻이다.

엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.

ex) em.persist(member);
-> persist() 메소드는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다.

 

엔티티의 생명주기

 

1. 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계 없는 상태

순수한 객체 상태이며 저장하지 않은 상태
ex)
Member member = new Member();
member.setId("member1");
member.setName("회원1");

 

2. 영속(managed) : 영속성 컨텍스트에 저장된 상태

엔티티 매니저를 통해 엔티티 컨텍스트에 저장되고 영속성 컨텍스트가 관리하는 엔티티를 영속 상태라 한다.
ex) em.persist(member);
em.find()나 JPQL을 사용하여 조회한 엔티티도 영속성 컨텍스트가 관리하는 영속 상태다.

 

3. 준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태

영속성 컨텍스트가 관리하던 상태의 엔티티틀 영속성 컨텍스트가 관리하지 않으면 준영속 상태가 된다.
em.detach()를 호출하면 특정 엔티티를 준영속 상태로 만들 수 있다.
em.close()나 em.clear()를 사용해도 준영속 상태가 된다.
ex)em.detach(member);

 

4. 삭제(removed) : 삭제된 상태

엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제한다.
ex) em.remove(member);
728x90
반응형