Spring Boot/JPA(Java Persistence API)

EntityManager API

재윤 2025. 8. 28. 17:51
반응형

→ JPA 스펙이 제공하는 핵심 인터페이스 먼저 익히기

1. persist(Object entity)

  • 엔티티를 영속성 컨텍스트에 저장 → DB에는 즉시 INSERT 안 하고 트랜잭션 커밋 시 반영
Member member = new Member("jaeyoon", 20);
em.persist(member); // 영속 상태 진입

2. find(Class<T> entityClass, Object primaryKey)

  • PK(기본키)로 엔티티 조회
  • 1차 캐시에 있으면 캐시에서 반환, 없으면 DB SELECT 실행 후 캐시에 넣고 반환
Member member = em.find(Member.class, 1L);

3. remove(Object entity)

  • 엔티티를 삭제 예약 상태로 바꿈
  • 트랜잭션 커밋 시 DELETE SQL 실행
Member member = em.find(Member.class, 1L);
em.remove(member); // 커밋 시 delete from member where id=1

4. merge(Object entity)

  • 준영속(detached) 상태의 엔티티를 다시 영속성 컨텍스트에 병합
  • 새 영속 엔티티를 반환하고, 기존 값과 병합
Member detachedMember = ... // 준영속 상태
Member merged = em.merge(detachedMember);

5. flush()

  • 영속성 컨텍스트의 변경 내용을 강제로 DB에 반영 (SQL 실행)
  • 단, 트랜잭션은 아직 열려있음 → 커밋은 아님
em.persist(new Member("kim", 30));
em.flush(); // INSERT SQL 즉시 전송

6. clear()

  • 영속성 컨텍스트를 비움 (1차 캐시 삭제)
em.clear(); // 이후 조회 시 무조건 DB에서 SELECT

7. detach(Object entity)

  • 특정 엔티티만 준영속 상태로 바꿈 (관리 대상에서 제외)
Member member = em.find(Member.class, 1L);
em.detach(member); // 이제 더티체킹, 캐싱 안 됨

8. close()

  • EntityManager 자체를 닫음 (보통 애플리케이션 레벨에서 관리)

9. createQuery()

  • JPQL 실행 시 사용
List<Member> result = em.createQuery("select m from Member m", Member.class)
                        .setParameter("name", "kim")
                        .getResultList();
반응형

'Spring Boot > JPA(Java Persistence API)' 카테고리의 다른 글

N + 1 문제 해결  (1) 2025.08.28
영속성 컨텍스트  (0) 2025.08.28
쿼리 방법(JPQL/Criteria)  (1) 2025.08.28
매핑 규칙(어노테이션)  (1) 2025.08.28