종식당
[매일메일 2025-02-05] 엔티티 매니저에 대해 설명해주세요. 본문
🐶 엔티티 매니저
엔티티 매니저에 대해 알기 위해서는 먼저 영속성 콘텍스트에 대해 알아야 한다.
🐗 영속성 컨텍스트
영속성 콘텍스트는 엔티티를 영구 저장하는 환경으로 1차 캐싱, 쓰기 지연, 변경 감지를 통해 영속 로직을 효율적으로 할 수 있게 해 줍니다. 이러한 효율적인 영속 로직 수행을 위해서 엔티티는 영속성 콘텍스트에 의해 관리되어야 한다.
이런 작업을 도와주는 것이 바로 엔티티 매니저이다.
엔티티 매니저는 엔티티의 상태를 변경하고, 영속성 콘텍스트와 상호작용함으로써 영속 로직을 수행하는 역할을 가지고 있다.
🕵️ 조금 더 구체적으로 엔티티 매니저를 살펴보자
엔티티는 영속성 컨텍스트와 관련하여 4가지 상태를 가질 수 있다.
이는 비영속, 영속, 준영속, 삭제이다.
엔티티 매니저는 persist, merge, remove, close메서드를 이용하여 엔티티의 상태를 변경할 수 있다. 또한, 엔티티 매니저는 영속성 콘텍스트의 1차 캐시로부터 엔티티를 조회할 수 있으며, 쓰기 지연 저장소에 있는 쿼리들을 flush 하여 DB와 동기화시킬 수 있다.
또한 JPQL이나 Native Query를 이용해서 직접 DB로부터 데이터를 불러올 수도 있다.
🥸 엔티티의 각 상태에 대해서 설명해 주세요
Member member = new Member("산초");
비영속 상태는 엔티티 객체가 새로 생성되었지만, 아직 영속성 콘텍스트와 연관되지 않은 상태이다. 이 상태에서는 데이터베이스와 전혀 관련이 없으며, 엔티티 객체는 메모리 상에만 존재한다.
em.persist(member);
em.merge(detagedMember);
em.find(Member.class, 1L);
영속 상태는 엔티티 객체가 영속성 콘텍스트에 관리되고 있는 상태이다. 이 상태에서는 엔티티으 변경 사항이 자동으로 데이터베이스에 반영된다.
em.detach(member);
em.clear();
em.close();
준영속 상태는 엔티티 객체가 한번 영속성 콘텍스트에 의해 관리되었지만, 현재는 영속성 컨텍스트와 분리된 상태이다.
이 상태에서는 엔티티 객체의 변경 사항이 더 이상 데이터베이스에 반영되지 않는다.
영속성 컨텍스트 종료, 트랜잭션 종료 등으로도 준영속 상태로 전환된다.
em.remove(member);
삭제 상태는 엔티티 객체가 영속성 콘텍스트에서 제거된 상태이다.
이 상태에서는 엔티티 객체가 데이터 베이스에서 삭제된다.
'매일메일' 카테고리의 다른 글
[매일메일 2025-02-06] JPA의 N + 1 문제에 대해서 설명해주세요. (0) | 2025.02.11 |
---|---|
[매일메일 2025-02-10] 일급 컬렉션이 무엇인가요? (0) | 2025.02.10 |
[매일메일 2025-02-07] 자바에서 Checked Exception과 Unchecked Exception에 대해서 설명해주세요. (0) | 2025.02.08 |
[매일메일 2025-02-04] JPA의 ddl-auto 옵션은 각각 어떤 동작을 하고 어떤 상황에서 사용해야 할까요? (1) | 2025.02.08 |
[매일메일] 클로저에 대해서 설명해주세요. (0) | 2025.02.04 |