스파이더 웹 개발

객체 지향 쿼리 언어 본문

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
반응형

'JPA' 카테고리의 다른 글

엔티티 설계시 주의점  (0) 2022.09.19
객체 지향 쿼리 언어 - 2  (0) 2022.09.17
값 타입  (0) 2022.09.16
프록시와 연관관계 관리  (0) 2022.09.16
고급 매핑  (0) 2022.09.07
Comments