带有 queryDSL 的 Spring Boot 3

问题描述 投票:0回答:4

我如何使用带有 Spring Boot 3.0 的 queryDSL 生成 Q 类。

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
}

我尝试自己动手创建Q类,但它不起作用(

spring-boot querydsl
4个回答
15
投票

我在升级到 Spring Boot 3 时收到了同样的错误。

我遵循了 QueryDSL 发行说明中的小提示: http://querydsl.com/releases.html https://github.com/querydsl/querydsl/issues/2612

我在我的 build.gradle 中替换了:

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

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

2
投票

根据 @Jyrgen 答案为 Maven 用户添加更多信息:

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>

其中 ${querydsl.version} = 5.0.0

Plugins
部分:

<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>

2
投票

用于以(生成的)对象表示法编写 SQL 的库

支持 Jakarta 命名空间,但是……

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

Jakarta 分类器使用 Eclipse Transformer 插件打包一个带有 jakarta.* 包名的 jar 此外,当包含 querydsl-apt 作为 maven-compiler-plugin 的注释处理器路径时 抛弃旧的 com.mysema.maven:apt-maven-plugin


0
投票

对于 Gradle,这个配置对我来说效果很好

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'

没有配置

jakarta.persistence-api
依赖作为注释处理器我收到错误
> java.lang.NoClassDefFoundError: jakarta/persistence/Entity

© www.soinside.com 2019 - 2024. All rights reserved.