You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用querydsl-spatial无法生成QueryDSL的QClass问题排查

Spring Boot 3.2.3集成QueryDSL-Spatial构建异常解决方案求助

项目环境与依赖配置

当前使用Spring Boot 3.2.3,JDK 21,项目依赖与构建配置如下:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.3</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<groupId>com.test</groupId>
<artifactId>service</artifactId>
<version>0.0.1-SNAPSHOT</version>

<name>service</name>

<properties>
    <java.version>21</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-spatial</artifactId>
        <version>${hibernate.version}</version>
    </dependency>

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>jakarta.validation</groupId>
        <artifactId>jakarta.validation-api</artifactId>
        <version>3.1.0-M1</version>
    </dependency>
        
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <version>${querydsl.version}</version>
        <classifier>jakarta</classifier>
        <scope>provided</scope>
    </dependency>

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

    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-core</artifactId>
        <version>${querydsl.version}</version>
    </dependency>

    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-spatial</artifactId>
        <version>${querydsl.version}</version>
    </dependency>

    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-sql</artifactId>
        <version>${querydsl.version}</version>
    </dependency>

    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-sql-spatial</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-codegen</artifactId>
        <version>${querydsl.version}</version>
    </dependency>

    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-sql-codegen</artifactId>
        <version>${querydsl.version}</version>
    </dependency>

    <dependency>
        <groupId>net.postgis</groupId>
        <artifactId>postgis-jdbc</artifactId>
        <version>2023.1.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

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

实体类空间字段定义

实体类中使用了Geolatte的Point类型存储地理信息:

@Column(columnDefinition = "geography")
private org.geolatte.geom.Point location;

构建异常信息

执行构建时抛出以下异常:

Caused by: java.lang.IllegalArgumentException: com.querydsl.sql.Configuration is not registered
at com.querydsl.codegen.AbstractModule.get (AbstractModule.java:99)
at com.querydsl.sql.spatial.SpatialSupport.addSupport (SpatialSupport.java:58)
at com.querydsl.codegen.AbstractModule.loadExtensions (AbstractModule.java:83)
at com.querydsl.apt.DefaultConfiguration.<init> (DefaultConfiguration.java:283)
at com.querydsl.apt.DefaultConfiguration.<init> (DefaultConfiguration.java:114)
at com.querydsl.apt.jpa.JPAConfiguration.<init> (JPAConfiguration.java:83)
at com.querydsl.apt.jpa.JPAAnnotationProcessor.createConfiguration (JPAAnnotationProcessor.java:42)
at com.querydsl.apt.AbstractQuerydslProcessor.process (AbstractQuerydslProcessor.java:82)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor (JavacProcessingEnvironment.java:1021)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs (JavacProcessingEnvironment.java:937)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run (JavacProcessingEnvironment.java:1265)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing (JavacProcessingEnvironment.java:1380)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations (JavaCompiler.java:1272)
at com.sun.tools.javac.main.JavaCompiler.compile (JavaCompiler.java:946)
at com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0 (JavacTaskImpl.java:104)
at com.sun.tools.javac.api.JavacTaskImpl.invocationHelper (JavacTaskImpl.java:152)
at com.sun.tools.javac.api.JavacTaskImpl.doCall (JavacTaskImpl.java:100)
at com.sun.tools.javac.api.JavacTaskImpl.call (JavacTaskImpl.java:94)
at com.sun.tools.javac.api.JavacTaskImpl.call (JavacTaskImpl.java:72)
at java.util.concurrent.FutureTask.run (FutureTask.java:317)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1144)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:642)
at java.lang.Thread.run (Thread.java:1583)

问题补充

曾尝试切换使用querydsl-maven-plugin,但该插件似乎不支持Jakarta规范,特此寻求可行的解决方案。


解决方案

1. 移除不必要的SQL相关依赖

异常根源是引入了QueryDSL的SQL模块依赖(querydsl-sql、querydsl-sql-spatial、querydsl-sql-spring、querydsl-sql-codegen),但当前项目使用JPA,这些SQL模块会导致注解处理器加载错误的配置类。需要从依赖中移除这些SQL相关的依赖项。

2. 配置正确的QueryDSL与Hibernate版本

Spring Boot 3.2.3需要适配兼容Jakarta的QueryDSL版本(5.0.0+),同时指定Hibernate版本与Spring Boot父版本匹配。在properties中添加:

<properties>
    <java.version>21</java.version>
    <querydsl.version>5.1.0</querydsl.version>
    <hibernate.version>6.4.4.Final</hibernate.version>
</properties>

3. 替换注解处理器插件

旧的apt-maven-plugin对Jakarta兼容性差,改用maven-compiler-plugin配置注解处理器路径,确保加载Jakarta版本的QueryDSL处理器:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.12.1</version>
            <configuration>
                <annotationProcessorPaths>
                    <path>
                        <groupId>com.querydsl</groupId>
                        <artifactId>querydsl-apt</artifactId>
                        <version>${querydsl.version}</version>
                        <classifier>jakarta</classifier>
                    </path>
                    <path>
                        <groupId>jakarta.persistence</groupId>
                        <artifactId>jakarta.persistence-api</artifactId>
                        <version>3.1.0</version>
                    </path>
                    <path>
                        <groupId>org.hibernate.common</groupId>
                        <artifactId>hibernate-commons-annotations</artifactId>
                        <version>6.0.6.Final</version>
                    </path>
                </annotationProcessorPaths>
                <proc>none</proc>
            </configuration>
        </plugin>
    </plugins>
</build>

4. 确保Geolatte依赖存在

如果项目中未自动引入geolatte-geom,手动添加依赖:

<dependency>
    <groupId>org.geolatte</groupId>
    <artifactId>geolatte-geom</artifactId>
    <version>1.9.0</version>
</dependency>

完成以上调整后,重新执行构建即可解决异常。

内容的提问来源于stack exchange,提问作者sromdhane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:52:02