티스토리 뷰
JPA
[JPA-Error] IllegalArgumentException: Cannot create TypedQuery for query with more than one return using requested result type
heemang.dev 2023. 9. 18. 19:37
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를 사용할 때는 클래스 정보를 넘겨주지 않아도 된다.