Query 작성법 4. Criteria API

Yennie·2024년 6월 22일

JPA

목록 보기
17/19

Criteria JPA

JPQL 혹은 native SQL을 사용하는 경우 쿼리문의 타입 안전성을 보장할 수 없다. 컴파일 과정에서 쿼리를 검증할 수 없기 때문에 잘못 작성한 쿼리에 대해서는 런타임 에러로만 문제를 발견할 수 있다.

해법 Criteria API는 쿼리문을 문자열이 아닌 프로그램 소스 코드처럼 작성할 수 있게 해준다.

public List<UserEntity> findByUsername(String username) {
	CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaQuery<UserEntity> query = builder.createQuery(UserEntity.class);
    
    Root<UserEntity> root = query.from(UserEntity.class);
    
    query = query.select(root).where(builder.and(builder.equal(root.get("username", "yeeun"));
    
    return em.createQuery(query).getResultList();
}

QueryDSL vs. Criteria API

  • Criteria API 는 표준 JPA 명세에 포함되는 라이브러리로 JPA를 사용하면 Criteria API도 사용할 수 있다. QueryDSL은 오픈소스 서드파티 라이브러리이다.
  • Criteria API는 API가 장황하고 복잡해서 아주 단순한 쿼리를 작성하는데도 상당히 많은 코드를 작성해야한다는 단점이 있다.
  • Criteria API 는 JPA가 사용되는 환경에서만 사용할 수 있는 반면, QueryDSL은 JPA 외에도 몽고DB나 루신, JDO등을 사용하는 환경에서도 사용 가능하다.
profile
PM | Aspiring SWE | linkedin.com/in/emilyyeeun

0개의 댓글