๋ฌธ์ ์ํฉ
์ด์ ์ ํ๋ก์ ํธํ ๋น์ ์ฌ์ฉํ๋ JPA, QueryDSL ์ฝ๋๋ฅผ ์๋ก์ด ํ๋ก์ ํธ์ ์ ์ฉํ๋ ค๋ค๊ฐ
EntityManager ๊ด๋ จ ์๋ฌ์ Q์ํฐํฐ๊ฐ ๋ง๋ค์ด์ง์ง ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ์๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
- SpringBoot 3๋ฒ์ ์ด์์ QueryDsl ์ธํ ์ด ๋ณ๊ฒฝ๋์๋ค. ๋ณ๊ฒฝ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ธํด์ฃผ์.
ํด๊ฒฐ ๊ณผ์
๊ธฐ์กด์๋ build.gradle์ ์๋์ ๊ฐ์ด ์ ์ธํด์ฃผ์๋๋ฐ,
implementation "com.querydsl:querydsl-jpa"
์ด์ ๋ jakarta ํจํค์ง๋ฅผ ์ฌ์ฉํ๊ฒ ๋ค๊ณ ๋ช ์๋ฅผ ํด์ค์ผ ํ๋ค.
implementation "com.querydsl:querydsl-jpa:5.0.0:jakarta"
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
JPA์์ ์ฌ์ฉ๋๋ Entity ๋ฑ์ ์ด๋ ธํ ์ด์ ์ด javax -> jakarta ๋ก ํจํค์ง๊ฐ ์ด๋ํ์๋ค.
๋๋ฌธ์ javax/persistence/entity ์๋ฌ์ ๊ฐ์ด javax ๊ด๋ จ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋๋ฌธ์ ์์ ๊ฐ์ด jakarta๋ฅผ ๊ฐ์ด ๋ช ์ํด์ค์ผ ํ๋ค.
์ ์ฒด build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.3'
id 'io.spring.dependency-management' version '1.1.3'
}
group = 'com.async.myapp'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa' //jpa
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.projectlombok:lombok:1.18.22'
annotationProcessor 'org.projectlombok:lombok' //add
testImplementation 'org.springframework.boot:spring-boot-starter-test'
//mysql
runtimeOnly 'com.mysql:mysql-connector-j'
//swagger ์ฌ์ฉ
implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'
//webClient ์ฌ์ฉ - http ์์ฒญ
implementation 'org.springframework.boot:spring-boot-starter-webflux'
//querydsl ์ถ๊ฐ 1
implementation "com.querydsl:querydsl-jpa:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
// java.lang.NoClassDefFoundError (javax.annotation.Generated) ๋์ ์ฝ๋
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
// java.lang.NoClassDefFoundError (javax.annotation.Entity) ๋์ ์ฝ๋
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}
//querydsl ์ถ๊ฐ 2
def generated = 'src/main/generated' //QClass ํ์ผ ์์ฑ ์์น
sourceSets {
main.java.srcDirs += [generated] //java source set์ querydsl QClass ์์น ์ถ๊ฐ
}
tasks.withType(JavaCompile){ //QClass ํ์ผ ์์ฑ ์์น๋ฅผ ์ง์
options.getGeneratedSourceOutputDirectory().set(file(generated))
}
clean{
delete file(generated) //gradle clean ์ generated ๋๋ ํ ๋ฆฌ ์ญ์
}