JPA
객체 지향 쿼리 언어
스파이더웹
2022. 9. 16. 23:08
728x90
반응형
JPA는 다양한 쿼리 방법을 지원
- JPQL
- QueryDSL
- 네이티브 SQL
JPQL (객체지향 SQL)
검색을 할 때 테이블이 아닌 엔티티를 객체를 대상으로 검색
예제)
try {
List<Member> resultList = em.createQuery(
"select m from Member m where m.id like '%kim%'", Member.class
).getResultList();
tx.commit();
}
결과
Hibernate:
/* select
m
from
Member m
where
m.id like '%kim%' *
JPQL 문법
엔티티와 속성은 대소문자 구분을 해야한다
JPQL 키워드는 대소문자 구분 하지 않는다
결과 조회
query.getResultList(): 결과가 하나 이상일 때, 리스트 반환
- 결과가 없으면 빈 리스트 반환
query.getSingleResult(): 결과가 정확히 하나, 단일 객체 반환
- 결과가 없으면: javax.persistence.NoResultException
- 둘 이상이면: javax.persistence.NonUniqueResultException
파라미터 바인딩 - 이름 기준, (위치기준도 있으나 사용하지않는것을 매우 권장한다)
select m from Member m where m.username=:username
방식으로 사용하면된다
페이징
JPA는 페이징을 다음 두 API로 추상화 하였다
- setFirstResult : 조회 시작 위치
- setMaxResult : 조회할 데이터 수
서브 쿼리
JPA는 WHERE, HAVING 절에서만 서브 쿼리를 사용가능하게 해놓았다.
그러나 하이버네이트에서는 SELECT 절도 가능하게 지원하였다.
FROM절의 서브 쿼리는 현재 JPQL에서 불가능하므로 조인으로 해결하거나 native 쿼리로 해결한다
728x90
반응형