[JPA] 쿼리(Query)

Junseo Kim·2020년 3월 23일

Query

JPA 또는 hibernate를 이용하여 DB에서 데이터를 가져오는 방법.

JPQL(HQL)

Java Persistent Query Language(Hibernate Query Language)의 약자이다.

SQL과 비슷하지만, 데이터베이스 테이블 기준이 아니라, 엔티티 모델 기준이라는 점에서 큰 차이가 있다.

TypedQuery<'엔티티이름'> query = entityManager.createQuery("SELECT p FROM '엔티티이름' As p", '엔티티이름'.class);
List<'엔티티이름'> posts = query.getResultList();
posts.forEach(System.out::println); // 출력해보는 법

이렇게 작성된 JPQL은 데이터베이스에 독립적이어서, 이 JPQL이 각 DB에 맞는 SQL로 변환되어 실행된다.

JPQL의 단점은 타입세이프하지 않다는 것이다.(문자열이기 때문에 오타 발생 가능)

Criteria

타입 세이프한 쿼리를 만들 수 있는 방법.

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<'엔티티이름'> query = builder.createQuery('엔티티이름'.class);
Root<'엔티티이름'> root = query.from('엔티티이름'.class);
query.select(root);
List<'엔티티이름'> posts = entityManager.createQuery(query).getResultList();

Native Query

SQL 쿼리 사용

List<'엔티티이름'> posts = entityManager.createNativeQuery("SELECT * FROM '테이블'", '엔티티이름'.class).getResultList();

0개의 댓글