| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 서버
- 자바스크립트
- 백엔드
- 프로그래머스
- MySQL
- 알고리즘
- Next.js
- 스프링부트
- SQL
- spring
- 쿼리
- 프런트엔드
- oracle
- 데이터베이스
- java
- web
- 스프링
- 코드 테스트
- 프론트엔드
- node.js
- 자바
- BACK-END
- JavaScript
- jpa
- 정리
- jsp
- 미니정리
- 오라클
- 디자인 패턴
- 코드테스트
- Today
- Total
참치코더의 꿈 메모장
JPA / @PersistenceContext + EntityManager VS JpaRepositroy 상속 방식 본문

@PersistenceContext + EntityManager 방식
장점
- JPA 내부 동작을 직접 학습이 가능하다. (요즘엔 잘 사용하지 않는다....)
- 복잡한 커스텀 쿼리나 특수한 트랜잭션 제어 시 유연함
단점
- 반복 코드 많음(save, find 등)
- 스프링 데이터가 제공하는 편리한 기능 활용 불가
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@Repository
@Transactional
public class MemberRepository {
@PersistenceContext // DB 선언
private EntityManager em;
public Long save(Member member) {
em.persist(member);
return member.getId();
}
public Member find(Long id) {
return em.find(Member.class, id);
}
}
|
cs |
주요 메서드
1. 엔티티 저장,수정,삭제
persist(Object entity)
: 새로운 엔티티를 DB에 저장, 영속 상태가 됨, 트랜잭션 커밋 시 INSERT 발생
merge(Object entity)
: 준영속 상태(Detached)의 엔티티를 영속 상태로 병합. DB에 없는 경우 INSERT
있으면 UPDATE
remove(Object entity)
: 영속 상태 엔티티 삭제, 트랜잭션 커밋 시 DELETE 발생
detach(Object entity)
: 엔티티를 영속성 컨텍스트에서 분리, 더 이상 자동 변경 감지 안됨
clear()
: 영속성 컨텍스트 초기화, 모든 엔티티 분리
flush()
: 영속성 컨텍스트의 변경 내용을 DB에 즉시 반영
2. 엔티티 조회
find(Class<T> entityClass, object primaryKey)
: PK로 단일 엔티티 조회
getReference(Class<T> entityClass, Object primaryKey)
: 프록시 조회(지연 로딩, 실제 DB 쿼리는 필요 시점에 실행)
contains(Object entity)
: 엔티티가 현재 영속성 컨텍스트에 포함되어 있는지 확인
3. 쿼리 실행(직접 SQL 입력)
createQuery(String jpql)
: JPQL 쿼리 생성, Query 반환
createQuery(String jpql, Class<T> resultClass)
: 타입 지정 JPQL 쿼리 생성, TypedQuery<T> 반환
createNamedQuery(String name)
: NamedQuery 호출
createNativeQuery(String sql)
: Native SQL 쿼리 실행
createNativeQuery(String sql, Class<T> resultClass)
: Native SQL + 엔티티 매핑
4. 캐시 관련
refresh(Object entity)
: DB의 최신 값으로 엔티티 재조회
lock(Object entity, LockModeType mode)
: 락 모드 적용
setProperty(String, object)
: 영속성 컨텍스트 옵션 설정
JpaRepositroy 상속 방식
장점
- CRUD 기본 기능 (save, findById, findAll, delete) 자동 제공
- 페이징, 정렬 등 기본 내장
- 코드가 훨씬 간결하고 유지보수 편리
단점
- JPA 동작 원리 학습에는 EntityManager 직접 사용만큼 직관적이지 않음
- 아주 특수한 커스텀 동작 시 EntityManager 필요
|
1
2
3
4
|
public interface MemberRepository extends JpaRepository<Member, Long> {
// 필요한 커스텀 쿼리만 추가
Optional<Member> findByName(String name);
}
|
cs |
결론!!! -> 학습용으로는 EntityManager, 실 프로젝트에서는 JpaRepository가 표준
'Spring' 카테고리의 다른 글
| Thymeleaf 기본 문법 정리 (연산, 속성 값 설정, 반복, 조건부 평가, 주석) (0) | 2026.01.12 |
|---|---|
| Spring / Thymeleaf 기본 문법 간단 미니 정리 (1) | 2026.01.02 |
| Spring / BindException 예외 처리 및 사용법 (@RestControllerAdvice, @Valid) (0) | 2025.09.26 |
| Spring / Projection 정리 (개인 프로젝트 부분 발췌) (0) | 2025.09.24 |
| Spring / @ModelAttribute, 스프링 redirect : 미니 정리 (0) | 2025.09.23 |