1. 경로표현식 특징
상태 필드
- 단순히 값을 저장하기 위한 필드
- ex) m.username
연관 필드
- 단일 값 연관 필드 @XToOne
- 묵시적 조인이 발생 (inner join)
- 컬랙션 값 연관 필드 @XToMany
- 묵시적 조인이 발생
묵시적 조인을 쓰지말고, 명시적 조인을 만들어서 써라.
2. 페치 조인
- JPQL 성능 최적화를 위해 제공되는 기능이다.
- 연관된 엔티티나 컬렉션을 SQL 한번에 함께 조회하는 기능이다.
ex) select m from Member m join fetch m.team
컬렉션 패치 조인
- 1대 다 조인인 경우에는 데이터가 뻥튀기 될 수 있다.
- distinct로 제거할 수 있다.
- JQPL distinct는 중복된 엔티티를 제거해준다. (sql distinct 와는 조금 차이가 있음)
- distinct로 제거할 수 있다.
String query = "select distinct t from Team t join fetch t.members";
3. 페치조인 특징과 한계
- 페치조인 대상에는 Alias 를 줄 수 없다.
- hibernate는 가능하나 사용하지 말자.
- 페치조인을 하는 대상에는 조건문을 줘서 몇개만 뽑는 행동을 하지 말자
- cascade 옵션같이 많이 들어있으면 데이터가 이상해질 수 있다.
// 사용 ㄴㄴ
String query = "select t from Team t join fetch t.members m where m.age < 10";
// 사용할거면 Member에서 시작하자
select m from Member m join fetch m.team t where m.age < 10
- 둘 이상의 컬렉션은 페치 조인 할 수 없다. = 페치 조인에 컬렉션은 하나만 지정할 수 있다.
- 컬렉션을 페치 조인하면 페이징 API를 쓰지마라.
- XToOne 은 페이징 가능
- XToMany 는 페이징 불가능, 페이징이 아예 적용이 안됨
- @BatchSize를 이용해서 in(?, ?) 쿼리를 통해서 가져오는 방식을 사용해야 한다.
- 혹은 global batchsize 세팅
- hibernate.default_batch_fetch_size 를 사용
4. 다형성 쿼리
type
select i
from item i
where type(i) IN (Book, Movie)
->
select i
from i
where i.DTYPE in ('B', 'M')
treat
select i
from Item i
where treat(i as Book).author = 'kim'
->
select i.*
from item i
where i.DTYPE = 'B' and i.author = 'kim'
5. 엔티티 직접 사용
예시) 엔티티를 count로 직접 넘긴다.
select count(m) from Member m;
->
select count(m.id) as cnt from Member m;
그런 경우, 엔티티의 PK (m-> m.id) 를 사용하여 수행된다.
6. JPQL Named Query 어노테이션
@NamedQuery
- 정적 쿼리만 가능하다.
- 어플리케이션 로딩 시점에 초기화한 뒤에, 캐시에 보관하고 재사용한다.
- 로딩 시점에 쿼리를 검증할 수 있다. (컴파일 타임 검증 가능)
정의 | 사용 |
7. 벌크 연산
쿼리 한번으로 여러 테이블의 로우를 변경
- executeUpdate()
- update / delete 모두 .executeUpdate() 사용
int count = em.createQuery("update Member m set m.age = 20").executeUpdate();
영속성 컨텍스트를 무시하고 데이터베이스에 직접 쿼리를 날린다.
따라서 bulk 연산 이후에 영속성 컨텍스트를 초기화해줘야 한다.
- em.clear()
'강의 정리 > 자바 ORM 표준 JPA' 카테고리의 다른 글
9. 기본 문법 (0) | 2021.01.02 |
---|---|
8. 값 타입 (0) | 2021.01.01 |
7. 프록시와 연관관계 관리 (0) | 2021.01.01 |
6. 고급 매핑 (0) | 2020.12.29 |
5. 다양한 연관관계 매핑 (0) | 2020.12.28 |