티스토리 뷰

 

JPQL을 사용하여 Member 엔티티의 name과 age 필드를 조회하고 있었다. 코드는 다음과 같다.

Query query = em.createQuery("select m.name, m.age from Member m", Member.class);
List resultList = query.getResultList();

위의 코드를 실행하면 다음과 같은 예외가 발생한다.

예외를 해석해보자면 TypeQuery를 생성할 수 없다는 듯하다. 난 분명 Query 객체를 생성했는데 왜 TypeQuery를 생성할 수 없다고 나오는 것인지 의문이었다. 

 

역시나 컴파일러는 잘못이 없다. 내가 코드를 잘못 짜서 발생한 문제이다. Query 객체는 createQuery() 메서드에 반환타입의 정보를 넘겨줄 필요가 없다. 즉 em.createQuery("select m.name, m.age from Member m", Member.class);  Member.class 클래스 정보를 넘겨줄 필요가 없다. 

 

다음과 같이 작성하면 정상적으로 실행된다.

Query query = em.createQuery("select m.name, m.age from Member m");
List resultList = query.getResultList();

결론

TypeQuery는 타입이 명확할 때 사용하고, Query는 타입이 명확하지 않을 때 사용한다. 그렇기 때문에 TypeQuery를 사용할 때는 클래스 정보를 넘겨주어야 하고 Query를 사용할 때는 클래스 정보를 넘겨주지 않아도 된다.

Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30