반응형
→ 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 |