JPQL(8)
-
JPQL - Criteria 기초 (조회, 집합, 정렬)
Criteria 쿼리는 JPQL을 자바 코드로 작성하도록 도와주는 빌더 클래스 API이다. Criteria를 사용하면 문자가 아닌 코드로 JPQL을 작성하므로 문법 오류를 컴파일 단계에서 잡을 수 있고 문자 기반의 JPQL보다 동적 쿼리를 안전하게 생성할 수 있는 장점이 있다. Criteria 기초Criteria API는 javax.persistence.criteria 패키지에 있다. 아래는 단순한 Criteria 쿼리이다.//JPQL: select m from Member mCriteriaBuilder cb = em.getCriteriaBuilder(); // 1. Criteria 쿼리 빌더// 2. Criteria 생성, 반환 타입 지정CriteriaQuery cq = cb.createQuery(..
2024.05.28 -
JPQL - CASE 식
특정 조건에 따라 분기할 때 CASE 식을 사용한다. CASE 식은 4가지 종류가 있다. 기본 CASE 심플 CASE COALESCE NULLIF ▼ 기본 CASE CASE {WHEN THEN }+ ELSE select case when m.age = 60 then '경로요금' else '일반요금' end from Member m ▼ 심플 CASE 심플 CASE는 조건식을 사용할 수 없지만 문법이 단순하다. 자바의 switch case문과 비슷하다. CASE {WHEN THEN }+ ELSE END select case t.name when '팀A' then '인센티브110%' when '팀B' then '인센티브120%' else '인센티브105%' end from Team t ▼ COALESCE CO..
2024.03.25 -
JPQL - 서브 쿼리
JPQL도 SQL 처럼 서브 쿼리를 지원한다. 여기에는 몇가지 제약이 있는데, 서브쿼리를 WHERE, HAVING 절에서만 사용할 수 있고, SELECT, FROM 절에서는 사용할 수 없다. 다음은 나이가 평균보다 많은 회원을 찾는다. select m from Member m where m.age > (select avg(m2.age) from Member m2) 다음은 한 건이라도 주문한 고객을 찾는다. select m from Member m where (select count(o) from Order o where m = o.member) > 0 # 참고로 이 쿼리는 다음처럼 컬렉션 값 연관 필드의 size 기능을 사용해도 같은 결과를 얻을 수 있다. select m from Member m whe..
2023.10.23 -
JPQL - 경로 표현식
경로 표현식이라는 것은 .(점)을 찍어 객체 그래프를 탐색하는 것이다. select m.username from Member m join m.team t join m.orders o where t.name = '팀A' 위의 JPQL에서 m.username, m.team, m.orders, t.name이 모두 경로 표현식을 사용한 예다. 경로 표현식의 용어 정리 상태 필드: 단순히 값을 저장하기 위한 필드(필드 or 프로퍼티) 연관 필드: 연관관계를 위한 필드, 임베디드 타입 포함(필드 or 프로퍼티) - 단일 값 연관 필드: @ManyToOne, @OneToOne, 대상이 엔티티 - 컬렉션 값 연관 필드: @OneToMany, @ManyToMany, 대상이 컬렉션 @Entity public class M..
2023.10.23 -
JPQL - 페치 조인(Fetch Join)
페치 조인은 SQL에서 이야기하는 조인의 종류는 아니고 JPQL에서 성능 최적화를 위해 제공하는 기능이다. 이것은 연관된 엔티티나 컬렉션을 한 번에 같이 조회하는 기능인데 join fetch 명령어로 사용할 수 있다. 엔티티 패치 조인 패치 조인을 사용해서 회원 엔티티를 조회하면서 연관된 팀 엔티티도 함께 조회하는 JPQL을 보자. select m from Member m join fetch m.team 예제를 보면 join 다음에 fetch라 되어있는데, 이렇게 하면 연관된 엔티티나 컬렉션을 함께 조회하는데 여기서는 회원(m)과 팀(m.team)을 함께 조회한다. 참고로 일반적인 JPQL 조인과는 다르게 m.team 다음에 별칭이 없는데 페치 조인은 별칭을 사용할 수 없다. 실행된 SQL은 다음과 같다..
2023.10.12 -
JPQL - (기본 문법, 쿼리 API, 페이징 API, 집합과 정렬)
기본 문법과 쿼리 API JPQL도 SQL과 비슷하게 SELECT, UPDATE, DELETE 문을 사용할 수 있다. 참고로 엔티티를 저장할 때는 EntityManager.persist() 메소드를 사용하면 되므로 INSERT 문은 없다. select_문 :: = select_절 from_절 [where_절] [groupby_절] [having_절] [orderby_절] update_문 :: = update_절 [where_절] delete_문 :: = delete_절 [where_절] SELECT 문 SELECT 문은 다음과 같이 사용한다. SELECT m FROM Member AS m where m.username = 'Hello' 엔티티와 속성은 대소문자를 구분한다. (Member, username..
2023.09.25