| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Next.js
- 미니정리
- jsp
- 서버
- 쿼리
- 프론트엔드
- 정리
- 스프링부트
- MySQL
- 자바
- jpa
- 오라클
- 프로그래머스
- 프런트엔드
- 디자인 패턴
- spring
- web
- oracle
- 백엔드
- node.js
- 자바스크립트
- JavaScript
- BACK-END
- 알고리즘
- 코드테스트
- 스프링
- SQL
- java
- 코드 테스트
- 데이터베이스
- Today
- Total
참치코더의 꿈 메모장
JPA / JPA 프로젝션, 페이징 API, JOIN 정리 본문

JPA 프로젝션(Projection)
- 프로젝션은 SQL의 SELECT처럼 JPQL에서 엔티티 전체가 아닌 필요한 데이터만 선택해서 조회하는 기능이다.
프로젝션의 종류
엔티티 프로젝션
- 엔티티 전체를 조회하는 프로젝션
- 영속성 컨텍스트로 관리되므로, 변경감지(Dirty Checking)가 가능하다.
|
1
2
3
|
List<Member> members = em.createQuery(
"SELECT , FROM Member m", Member.class)
.getResultList();
|
cs |
임베디드 프로젝션
- @Embeddable 타입을 조회하는 프로젝션
- 엔티티 내부에 속한 값이여서 영속성 컨텍스트로 관리가 된다.
- 별도의 테이블로 분리되지 않는다.
- 값 타입이라 불변(immutable)하게 설계하는 것이 좋다.
|
1
2
3
|
List<Address> addresses = em.createQuery(
"SELECT m.address FROM Member m", Address.class)
.getResultList();
|
cs |
new를 사용하는 DTO 프로젝션
- 내가 사용하고자 하는 실제 DTO로 매핑 할수 있는 프로젝션이다.
- 항상 new에 변경하고자하는 DTO의 패키지 명을 포함하여 작성을 해야 한다.
- 주로 API 응답용, 화면 데이터 전달용으로 사용된다.
- 영속성 컨텍스트가 관리를 해주지 않는다.
|
1
2
3
|
List<MemberDto> dtoList = em.createQuery(
"SELECT new com.example.MemberDto(m.username, m.age) FROM Member m", MemberDto.class)
.getResultList();
|
cs |
Paging API
- 대량 데이터를 한 번에 가져오는 것은 비효율적이다.
- Spring Data JPA에서는 Pageable과 Page 인터페이스로 페이징을 쉽게 구현할 수 있다.
|
1
2
3
4
5
6
7
8
9
|
// 시작 인덱스: 0부터 시작
int pageNumber = 0; // 0번째 페이지
int pageSize = 5; // 페이지당 5개
List<Member> members = em.createQuery(
"SELECT m FROM Member m ORDER BY m.username", Member.class)
.setFirstResult(pageNumber * pageSize) // 시작 위치
.setMaxResults(pageSize) // 가져올 데이터 수
.getResultList();
|
cs |
JPA JOIN (내부조인, 외부조인, 세타조인)
1. 내부 조인(INNER JOIN)
- 두 테이블이 모두 조건이 일치할 때만 결과를 반환한다.
- JOIN ON 절로 같은 결과를 얻을 수 있다.
|
1
2
3
4
|
SELECT m
FROM Member m
JOIN m.team t ON t.name = 'teamA'
|
cs |
|
1
2
3
|
SELECT m FROM Member m
(INNER)JOIN m.team t
WHERE t.name = :teamName
|
cs |
2. 외부 조인(LEFT (OUTER) JOIN)
- 왼쪽 테이블은 모두 조회하고 오른쪽은 매칭되는 경우만 가져온다.
|
1
2
|
SELECT m FROM Member m
LEFT JOIN m.team t
|
cs |
3. 세타 조인(Theta Join)
- 연관관계가 없어도 조인이 가능하다.
- CROSS JOIN 후 조건에 해당하는 값을 가져온다.
|
1
2
3
|
SELECT m FROM Member m, Team t
WHERE m.username = t.name
|
cs |
- JOIN ON을 활용하여 세타 조인/ 연관관계 없는 조인을 만들 수 있다.
- 기존 세타 조인과 비슷하지만, JOIN에 명시적 조건 작성이 가능하다.
- 연관관계가 없어도 ON 절로 조건 지정이 가능하다.
|
1
2
3
4
|
SELECT m, t
FROM Member m
JOIN Team t ON m.username = t.name
|
cs |
'JPA' 카테고리의 다른 글
| JPA / 다형성 쿼리, 엔티티 직접 사용 정리 (0) | 2025.11.07 |
|---|---|
| JPA / 경로 탐색, 패치 조인 미니 정리 (0) | 2025.11.05 |
| JPA / 값 타입 컬렉션(Value Type Collection) 정리 (0) | 2025.10.27 |
| JPA / 기본값 타입, 임베디드 타입 정리, 불변객체란?, 그에 따른 비교 (0) | 2025.10.24 |
| JPA / 지연로딩(lazy loading), 즉시로딩(eager loading), 영속성 전이(cascading), 고아객체(Orphan) 정리 (0) | 2025.10.21 |