관리 메뉴

JIE0025

Querydsl "No sources given; nested exception is java.lang.IllegalArgumentException: No sources given 본문

백엔드/이슈, 트러블슈팅

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();
	}

 

  1. 앞서 entitymanager를 직접 불러와 사용하는것 
  2. 엔티티는 1개,  레포지토리를 두개씩 만들어 사용한것 (서비스에 2개의 의존 레포지토리가 생겼다)

두가지 문제가 있어서 QueryDSL을 사용해보는겸 개선을 해보고자 했다. 

 

 

 

예전에 스터디하면서 정리해놓은 글이 있어 해당 사용방법을 참고했다.

https://jie0025.tistory.com/254

 

[Spring] QueryDSL

개인적으로 공부하면서 정리한 내용입니다 : ) FLAG Project - BE Study 2022.11.10 QueryDSL 왜 QueryDSL을 사용할까? SQL, JPQL의 문제점 JPA Criteria 문제의 해결 : QueryDSL QueryDSL의 장점 동적쿼리 vs 정적쿼리 JPQL vs

jie0025.tistory.com

 

 

 

 


 

 

✅ 해결 방법 

 

열심히 적용해봤는데, 요청메세지를 보내면 다음과 같은 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에 찍어보니까 잘 작동하는걸 확인할 수 있다!!!