Published 2022. 8. 29. 15:16

TypedQuery, Query

 

작성한 JPQL을 실행시키기 위해 만드는 쿼리 객체이다.

JPQL이 반환할 타입을 명확하게 지정할 수 있으면 TypedQuery를 사용하고, 명확하게 지정할 수 없으면 Query를 사용하면 된다.

 

// 조회대상이 정확히 Member 엔티티이므로 TypedQuery 사용 가능
TypedQuery<Member> query = em.createQuery("SELECT m FROM Member m", Member.class);

// 조회대상이 String, Integer로 명확하지 않으므로 Query 사용
Query query = em.createQuery("SELECT m.username, m.age FROM Member m");

TypedQuery로 실행된 쿼리는 두번쨰 인자로 주어진 클래스를 반환하고,
Query의 경우 예제처럼 조회 컬럼이 1개 이상일 경우 Object[], 1개일 경우 Object를 반환한다.

 

 

결과 조회

 

쿼리 객체에서 아래의 메서드들을 사용해 JPQL을 실행한다.

 

 

query.getResultList()

 

결과를 컬렉션으로 반환한다. 결과가 없으면 빈 컬렉션이 반환된다. 1건이면 1건만 들어간 컬렉션이 반환된다.

 

 

 query.getSingleResult()

 

결과가 정확히 1건 일때 사용한다.
결과가 없으면 javax.persistence.NoResultException, 결과가 1건 이상이면 javax.persistence.NonUniqueResultException이 발생한다.
근데 얘는 Optional을 반환해야 하지 않을까?

복사했습니다!