개발/이슈, 트러블슈팅
Querydsl "No sources given; nested exception is java.lang.IllegalArgumentException: No sources given
Kangjieun11
2022. 12. 22. 23:07
728x90
//private final EntityManager em; //엔티티 매니저를 가져오는게 문제가 됨 >> 비추천
//JPA or JPQL or QueryBuilder (QueryDsl)을 이용해 개선이 필요함
public List<Category> findAll(){
return em.createQuery(
"select c " +
"from Category c " +
"where c.parent is NULL"
,Category.class)
.getResultList();
}
- 앞서 entitymanager를 직접 불러와 사용하는것
- 엔티티는 1개, 레포지토리를 두개씩 만들어 사용한것 (서비스에 2개의 의존 레포지토리가 생겼다)
두가지 문제가 있어서 QueryDSL을 사용해보는겸 개선을 해보고자 했다.
예전에 스터디하면서 정리해놓은 글이 있어 해당 사용방법을 참고했다.
https://jie0025.tistory.com/254
✅ 해결 방법
열심히 적용해봤는데, 요청메세지를 보내면 다음과 같은 Exception이 발생했다.
{
"errorCode": "BAD_REQUEST",
"message": "No sources given; nested exception is java.lang.IllegalArgumentException: No sources given"
}
찾아보니까 QueryDSL 코드를 작성한 곳에 문제가 있었다.>>>> 제일 중요한 from을 안적었다 ㅠㅠㅠ
//틀린코드
@Override
public List<Category> findAll(){
QCategory category = QCategory.category;
List<Category> result = queryFactory
.select(category)
.where(category.parent.isNull())
.fetch();
return result;
}
------------
//from 적어주기
@Override
public List<Category> findAll(){
QCategory category = QCategory.category;
List<Category> result = queryFactory
.select(category)
.from(category)
.where(category.parent.isNull())
.fetch();
return result;
}
✅ 결과
result에 찍어보니까 잘 작동하는걸 확인할 수 있다!!!