spring boot 3 이상 버전 부터는 javax.persistence를 사용할 수 없다.
이유는 javax -> jakarta로 상호명이 바뀐건지 인수를 한건지.. (블로그에서 본거라 정확하지는 않다)
그래서 QueryDsl을 implementation할 때 jakarta를 명시해줘야 한다.
- build.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot") version "3.1.3"
id("io.spring.dependency-management") version "1.1.3"
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.21"
idea
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java {
sourceCompatibility = JavaVersion.VERSION_17
}
configurations {
compileOnly {
extendsFrom(configurations.annotationProcessor.get())
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.mariadb.jdbc:mariadb-java-client")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-security")
implementation("org.springframework.boot:spring-boot-starter-data-redis")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation ("com.querydsl:querydsl-jpa:5.0.0:jakarta")
kapt ("com.querydsl:querydsl-apt:5.0.0:jakarta")
kapt ("jakarta.annotation:jakarta.annotation-api")
kapt ("jakarta.persistence:jakarta.persistence-api")
testImplementation("org.springframework.boot:spring-boot-starter-test")
developmentOnly("org.springframework.boot:spring-boot-devtools")
annotationProcessor("org.projectlombok:lombok")
compileOnly("org.projectlombok:lombok")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs += "-Xjsr305=strict"
jvmTarget = "17"
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
idea {
module {
val kaptMain = file("build/generated/source/kapt/main")
sourceDirs.add(kaptMain)
generatedSourceDirs.add(kaptMain)
}
}
- QueryDslConfig
package com.example.productkotlin.config
import com.querydsl.jpa.impl.JPAQueryFactory
import jakarta.persistence.EntityManager
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
@Configuration
class QueryDslConfig (
private val em: EntityManager
) {
@Bean
fun jpaQueryFactory(): JPAQueryFactory {
return JPAQueryFactory(em)
}
}
만약 Gradle에 jakarta 명시 안해주면 JpaQueryFactory의 매개인자가 javax.persistence를 원하고있기 때문에 빈등록이 안됨
이후 QClass를 생성하려면 인텔리제이의 오른쪽 상단의 gradle(코끼리) 버튼에서
Tasks -> build -> bootJar 또는 Tasks -> other -> compileKotlin 해주면 Qclass가 생성된다.
- QClass 위치
끝.
'KOTLIN' 카테고리의 다른 글
spring filter에서부터 커스텀 어노테이션, 객체 파라미터에 값 넣기 (0) | 2023.09.21 |
---|---|
Kotlin Nullable 문법 특징 (0) | 2023.09.09 |
Kotlin 변수 type (0) | 2023.09.08 |
댓글