[Querydsl] java.lang.IllegalArgumentException: No sources given

2023. 9. 13. 16:59트러블슈팅(소프트)

728x90

 

 

실전! Querydsl - 인프런 | 강의

Querydsl의 기초부터 실무 활용까지, 한번에 해결해보세요!, 복잡한 쿼리, 동적 쿼리는 이제 안녕! Querydsl로 자바 백엔드 기술을 단단하게. 🚩 본 강의는 로드맵 과정입니다. 본 강의는 자바 백엔

www.inflearn.com

실행 환경 (build.gradle)

buildscript {
	ext {
		queryDslVersion = "5.0.0"
	}
}

plugins {
	id 'java'
	id 'org.springframework.boot' version '2.7.12'
	id 'io.spring.dependency-management' version '1.0.15.RELEASE'
	// querydsl 추가
	id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '11'
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	// querydsl 추가
	implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
	annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}"
	compileOnly 'org.projectlombok:lombok'
	runtimeOnly 'com.h2database:h2'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation('org.springframework.boot:spring-boot-starter-test') {
		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
	}
}



tasks.named('test') {
	useJUnitPlatform()
}

//querydsl 추가 시작
def querydslDir = "$buildDir/generated/querydsl"

querydsl {
	jpa = true
	querydslSourcesDir = querydslDir
}

sourceSets {
	main.java.srcDir querydslDir
}

configurations {
	querydsl.extendsFrom compileClasspath
}

compileQuerydsl {
	options.annotationProcessorPath = configurations.querydsl
}
//querydsl 추가 끝

왜 안돼

Querydsl 초기 설정을 해주고 난 뒤

테스트 코드를 아래와 같이 짰습니다!

 

	@Test
	void contextLoads() {
		Hello hello = new Hello();
		em.persist(hello);

		JPAQueryFactory query = new JPAQueryFactory(em);
		QHello qHello = QHello.hello;

		Hello result = query
				.select(qHello)
				.fetchOne();

		Assertions.assertThat(result).isEqualTo(hello);
		// lombok 동작 확인
		Assertions.assertThat(result.getId()).isEqualTo(hello.getId());
	}

근데 다음과 같은 에러가 나더라구요.

Aㅏ... 빨간줄...
아 왜 처음부터 막혀ㅕㅕㅕㅕㅕㅕ

빨간 줄 사이로 나온 에러를 보니 다음과 같았어요.

java.lang.IllegalArgumentException: No sources given

 

뭔 source...?

 

저는 이게 처음에 DB 가 설정이 되지 않았나 싶었습니다.

하지만 H2 관련 설정을 별도로 하지 않으면, 분명 H2 는 메모리 모드로

JVM 안에서 실행이 된다고 했는 데...?

 

솔루션

그럴 듯한(?) 에러에 대한 추론이었지만,

문제는 DB 설정에 있지 않았습니다.

 

저 에러는 말 그대로 어디서 가져와야하냐 라는 대한 오류였습니다.

SQL 식으로 말을 바꿔 말하자면 `from` 절이 없다는 얘기였습니다!

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

그래서 코드를 다음과 같이 고쳐야 합니다!

테스트도 잘 통과하네요!

여러분은 저처럼 이상한 에러에서 시간 버리지 마시고

바로바로 강의 진도 빼시길!! ㅠㅠㅠㅠ

728x90