Kotamadeo
Kotamadeo

Reputation: 123

Spring boot 3 with queryDSL

How i can to generate Q-classes using queryDSL with Spring Boot 3.0.

part of build.gradle:

plugins {
   id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
}

configurations {
   querydsl.extendsFrom implementation, compileOnly, runtimeOnly, annotationProcessor
}

dependencies {
   implementation 'org.springframework.boot:spring-boot-starter'
   implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
   implementation 'com.querydsl:querydsl-jpa'

   annotationProcessor 'com.querydsl:querydsl-apt'

   testImplementation 'org.springframework.boot:spring-boot-starter-test'
   testImplementation 'org.testcontainers:postgresql'

   runtimeOnly 'org.postgresql:postgresql'

}

querydsl {
   jpa = true
   library = 'com.querydsl:querydsl-apt:5.0.0'
   querydslSourcesDir = "$buildDir/generated/sources/annotationProcessor/java/main"
}

compileQuerydsl {
   options.annotationProcessorPath = configurations.querydsl
}

I try to create Q-classes by own hands, but it's doesn't work(

Upvotes: 12

Views: 22717

Answers (6)

安静的夜
安静的夜

Reputation: 11

I also faced this problem recently, but I solved it and now it works fine.
Here are the relevant parts of build.gradle.kts:

plugins {
    id("org.springframework.boot") version "3.2.0"
    id("io.spring.dependency-management") version "1.1.4"
    kotlin("jvm") version "1.9.20"
    kotlin("plugin.spring") version "1.9.20"
    kotlin("plugin.jpa") version "1.9.20"
    // Important use this kapt
    kotlin("kapt") version "1.9.22" 
}
dependencies {
    implementation("org.springframework.boot:spring-boot-starter-actuator")
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.springframework.boot:spring-boot-starter-webflux")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("io.projectreactor.kotlin:reactor-kotlin-extensions")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
    implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta")
    // Important. It turns out that this is jpa. Change it to jakarta.
    // kapt("com.querydsl:querydsl-apt:5.0.0:jpa")
    kapt("com.querydsl:querydsl-apt:5.0.0:jakarta")
    runtimeOnly("com.h2database:h2")
}

The key points are two important places marked.
Here is the link: https://github.com/querydsl/querydsl/issues/3651

Upvotes: 1

logbasex
logbasex

Reputation: 2242

It works for me.

implementation 'com.querydsl:querydsl-core:5.0.0'
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
implementation 'com.querydsl:querydsl-apt:5.0.0'
implementation 'com.querydsl:querydsl-sql:5.0.0'
implementation 'com.querydsl:querydsl-sql-spring:5.0.0'
annotationProcessor 'jakarta.persistence:jakarta.persistence-api:3.1.0'
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta'

Upvotes: 0

Mr.Cat
Mr.Cat

Reputation: 330

For Gradle this configs worked fine for me

dependencies {
    implementation group: 'com.querydsl', name: 'querydsl-jpa', version: '5.0.0', classifier: 'jakarta'
    annotationProcessor group: 'com.querydsl', name: 'querydsl-apt', version: '5.0.0', classifier: 'jakarta'
    annotationProcessor group: 'jakarta.persistence', name: 'jakarta.persistence-api', version: '3.1.0'
}

without configuringjakarta.persistence-api dependency as annotation processor I was getting error
> java.lang.NoClassDefFoundError: jakarta/persistence/Entity

Upvotes: 2

DV Singh
DV Singh

Reputation: 1088

Library used to write SQL in (generated) object notation

Supports Jakarta namespace but…

<dependency>
   <groupId>com.querydsl</groupId>
   <artifactId>querydsl-jpa</artifactId>
   <version>${querydsl.version}</version>
   *<classifier>jakarta</classifier>*
</dependency>

Jakarta classifier uses Eclipse Transformer plugin to package a jar with jakarta.* package names Also when including querydsl-apt as an annotation processor path for maven-compiler-plugin Ditch the old com.mysema.maven:apt-maven-plugin

Upvotes: 2

gandra404
gandra404

Reputation: 6071

To add more info for maven users based on @Jyrgen answer:

Dependencies:

<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-core</artifactId>
    <version>${querydsl.version}</version>
</dependency>
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
    <version>${querydsl.version}</version>
    <classifier>jakarta</classifier>
</dependency>
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-sql</artifactId>
    <version>${querydsl.version}</version>
</dependency>
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-sql-spring</artifactId>
    <version>${querydsl.version}</version>
</dependency>
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-apt</artifactId>
    <version>${querydsl.version}</version>
    <classifier>jakarta</classifier>
</dependency>

where ${querydsl.version} = 5.0.0

Plugins section:

<plugin>
    <groupId>com.mysema.maven</groupId>
    <artifactId>apt-maven-plugin</artifactId>
    <version>1.1.3</version>
    <executions>
        <execution>
            <goals>
                <goal>process</goal>
            </goals>
            <configuration>
                <outputDirectory>target/generated-sources/java</outputDirectory>
                <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
            </configuration>
        </execution>
    </executions>
</plugin>

Upvotes: 4

user14699464
user14699464

Reputation:

I recevied the same error upgrading to Spring Boot 3.

I followed the small hint from QueryDSL release notes: http://querydsl.com/releases.html https://github.com/querydsl/querydsl/issues/2612

And I replaced in my build.gradle:

api 'com.querydsl:querydsl-jpa' -> api 'com.querydsl:querydsl-jpa:5.0.0:jakarta'

and

annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jpa' -> annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta'

Upvotes: 24

Related Questions