[JPA] 쿼리(Query)

Junseo Kim·2020년 3월 23일
0

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개의 댓글