티스토리 뷰

ISSUE :  The service test failed when loading a list of posts using querydsl for a custom query - findPageBy (CustomPostRepositoryImpl). 

- Error message 

javax.persistence.NoResultException
java.lang.ClassNotFoundException: javax.persistence.NoResultException
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
	at org.springframework.data.jpa.repository.support.Querydsl.createQuery(Querydsl.java:83)
	at org.springframework.data.jpa.repository.support.Querydsl.createQuery(Querydsl.java:99)
	at org.springframework.data.jpa.repository.support.QuerydslRepositorySupport.from(QuerydslRepositorySupport.java:110)
	at com.grusha.board.repository.CustomPostRepositoryImpl.findPageBy(PostRepository.kt:21)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

 

- CustomPostRepositoryImpl class 

class CustomPostRepositoryImpl: CustomPostRepository, QuerydslRepositorySupport(Post::class.java) {
    override fun findPageBy(pageRequest: Pageable, postSearchRequestDto: PostSearchRequestDto): Page<Post> {
    	//
        //
    }
}

 

- ServiceTest class 

  given("게시글 목록 조회") {
        When("정상 조회") {
            val post = postService.findPageBy(PageRequest.of(0, 5), PostSearchRequestDto(title = "title1"))
            then("게시글 페이지를 반환합니다.") {
                post.number shouldBe 0
                ...
                ...
            }
        }

 

It was not possible to determine the correct reason from the stacktraces with a debugger, as the qClass, which is generated automatically by QuerydslRepositorySupport in repository implementation class, was being referenced. Cleaning the build and invalidating caches, and similar actions didn't work at all, but append the suffix 'jakarta' to the dependency "querydsl" resolved it and compiled without errors finally 😋

SOLUTION : append the suffix 'jakarta'  to the dependency !

plugins {
    id("org.springframework.boot") version "3.1.3"
    id("io.spring.dependency-management") version "1.1.3"
    id("org.jlleitschuh.gradle.ktlint") version "11.4.0"
    kotlin("jvm") version "1.8.22"
    kotlin("plugin.spring") version "1.8.22"
    kotlin("plugin.jpa") version "1.8.22"
    kotlin("kapt") version "1.8.22"
}

...

dependencies {
	// not "com.querydsl:querydsl-jpa:5.0.0")
    implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta")
    kapt("com.querydsl:querydsl-apt:5.0.0:jakarta")
}