Querydsl MongoDB Q类未生成,QuerydslMongoPredicateExecutor实例化失败求助
解决Querydsl Q类未生成及QuerydslMongoPredicateExecutor实例化失败问题
你遇到的核心问题是Q类(比如QUser)没有被正确生成,进而触发ClassNotFoundException,根源在于混用了不兼容的Querydsl版本,同时依赖和插件的配置存在groupId、版本不匹配的问题。下面一步步帮你排查修复:
1. 版本兼容性问题:统一Querydsl版本并匹配Spring Data
你当前混用了Querydsl 4.0.1(core依赖)和3.6.6(mongodb、apt依赖),这会引发严重的兼容性冲突。另外你的Spring Data版本是2.0.7.RELEASE,对应的Querydsl版本应为4.x系列,且Querydsl从4.x开始,groupId已从com.mysema.querydsl变更为com.querydsl,这是配置里的关键疏漏。
2. 修正依赖配置
将所有Querydsl相关依赖的groupId统一为com.querydsl,并保持版本一致(推荐使用和Spring Data 2.0.x兼容的4.2.2版本):
<dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-core</artifactId> <version>4.2.2</version> </dependency> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-mongodb</artifactId> <version>4.2.2</version> </dependency> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-apt</artifactId> <version>4.2.2</version> <scope>provided</scope> <!-- 该依赖仅编译期需要,添加provided更合理 --> </dependency>
3. 修正Maven插件配置
Querydsl 4.x之后,APT插件的groupId已从com.mysema.maven变更为com.querydsl.maven,同时处理器配置需对应调整:
<plugin> <groupId>com.querydsl.maven</groupId> <artifactId>querydsl-maven-plugin</artifactId> <version>4.2.2</version> <executions> <execution> <goals> <goal>process</goal> </goals> <configuration> <outputDirectory>target/generated-sources/java</outputDirectory> <processor>org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor</processor> <!-- 指定实体类所在包,避免漏生成Q类 --> <packages>com.example.demo</packages> </configuration> </execution> </executions> </plugin>
4. 手动触发Q类生成
完成配置修正后,执行Maven命令强制清理并重新编译生成Q类:
mvn clean compile
执行完成后,你应该能在target/generated-sources/java/com/example/demo/目录下看到生成的QUser类。
5. 额外检查点
- 确保你的实体类(比如User)上添加了
@Document注解,MongoAnnotationProcessor只会处理带有该注解的类。 - 确认IDE已将
target/generated-sources/java目录标记为Generated Sources Root,这样IDE才能识别生成的Q类。
内容的提问来源于stack exchange,提问作者Prateek Kamra
相关产品推荐
相关产品推荐

