728x90
반응형
문제
Querydsl에서 참조로하는 Q객체를 만들려고했는데 에러가 떴다.
해결방법
build.gradle.kts 파일에 가서 다음처럼 설정한다.
plugins {
id("org.springframework.boot") version "3.1.0"
id("io.spring.dependency-management") version "1.1.0"
kotlin("jvm") version "1.8.21"
kotlin("plugin.spring") version "1.8.21"
kotlin("kapt") version "1.7.10"
}
kapt: 스프링부트에서 롬복(lombok)을 사용하면 특정 어노테이션이 달린 클래스들을 롬복이 해석하여 소스 코드를 자동으로 생성해주듯이 코틀린에서 롬복처럼 사용하는 Annotation Processor이다. kapt를 사용하기 위해서 플러그인 선언부분에 kapt를 추가해주었다.
dependencies {
// ... 스프링부트 등 기타 설정들
implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta")
implementation("com.querydsl:querydsl-core:5.0.0")
kapt("com.querydsl:querydsl-apt:5.0.0:jakarta")
kapt("com.querydsl:querydsl-kotlin-codegen:5.0.0")
}
kapt를 통해 querydsl를 추가해준다.
Intellij의 경우,
gradle 탭에서 build > build를 실행해주면 된다. 혹시 생성될 파일을
그럼 좌측 프로젝트 파일 리스트에서 build/generated/source/kapt/ 부분에 main, test가 생성되고 Q객체가 정상적으로 참조된다.
QueryFactory를 이용하여 ORM 구문을 작성하고 싶다면 다음과 같이 설정 파일을 추가해주면 된다.
참조: https://shanepark.tistory.com/421
package //{경로는 각자의 프로젝트 경로로 참조}
import com.querydsl.jpa.impl.JPAQueryFactory
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import javax.persistence.EntityManager
import javax.persistence.PersistenceContext
@Configuration
class QueryDslConfig {
@PersistenceContext
lateinit var em: EntityManager
@Bean
fun jpaQueryFactory(): JPAQueryFactory {
return JPAQueryFactory(em)
}
package //{경로는 각자의 프로젝트 경로로 참조}
import com.querydsl.jpa.impl.JPAQueryFactory
import kr.quidev.quiz.domain.entity.QQuiz
import kr.quidev.quiz.domain.entity.Quiz
import org.springframework.stereotype.Repository
@Repository
class QuizRepositoryCustomImpl(
private val jpaQueryFactory: JPAQueryFactory
) : QuizRepositoryCustom {
override fun getList(pageSize: Long, page: Long): List<Quiz> {
return jpaQueryFactory.selectFrom(QQuiz.quiz)
.limit(pageSize)
.offset(page * pageSize)
.fetch()
}
}
728x90
반응형
'Programming-[CrossPlatform] > Kotlin' 카테고리의 다른 글
[TIL] 코틀린 문법 간단 요약 (0) | 2023.06.28 |
---|