JPQL
- SQL을 추상화한 객체 지향 쿼리 언어
- SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원
- 엔티티 객체를 대상으로 쿼리
- 특정 DB SQL에 의존하지 않음
- 결국에는 SQL로 변환된다
- 오타에 취약하고, 동적 쿼리 생성에 어려움이 있다 (그냥 String이기 때문)
- Criteria(JPA 공식 기술): JPQL 빌더 (실무 사용 X) -> QueryDSL 사용 권장
em.createQuery("쿼리문", 반환 객체)
QueryDSL(오픈 소스)
- 문자가 아닌 자바코드로 JPQL 작성 (JPQL 빌더 역할)
- 컴파일 시점에 문법 오류 발견 가능
- 동적 쿼리 작성 편리
- 공식 사이트에 친절하게 정리되어 있음
네이티브 SQL
- JPA가 제공하는 SQL을 직접 사용
- JPQL로 해결할 수 없는 특정 DB에 의존적인 쿼리를 생성할 때 사용
- 예) 오라클 CONNECT BY, 특정 DB만 사용하는 SQL 힌트
em.createNativeQuery("쿼리문", 반환 객체)
JDBC 직접 사용
- 개인적으로 네이티브보다는 이 방법 선호하심
- JPQL이나 네이티브 SQL 쿼리문을 실행하면 (커밋 전에도) JPA가 그 시점에 바로 flush를 해주는데, 직접 DB 커넥션을 활용하면 개발자 스스로 적절한 시점에 강제로 flush를 해주어야함
출처: 김영한님 JPA 프로그래밍 - 기본편
'course > inflearn' 카테고리의 다른 글
[JPA 프로그래밍 기본편] JPQL - 중급 문법 (0) | 2022.11.10 |
---|---|
[JPA 프로그래밍 기본편] JPQL - 기본 문법 (0) | 2022.11.03 |
[JPA 프로그래밍 기본편] 값 타입 (0) | 2022.09.18 |
[JPA 프로그래밍 기본편] 프록시와 연관관계 관리 (0) | 2022.09.09 |
[JPA 프로그래밍 기본편] 고급 매핑 (0) | 2022.09.06 |