Spring Boot 1.4 QueryDSL 依赖问题
Posted
技术标签:
【中文标题】Spring Boot 1.4 QueryDSL 依赖问题【英文标题】:Spring Boot 1.4 QueryDSL dependencies issue 【发布时间】:2016-12-12 09:13:34 【问题描述】:我刚刚从 Spring Boot 1.3.6 更新到 1.4.0,我遇到了下一个问题:
无法解析com.querydsl.jpa.JPQLQuery
类型。它是从所需的 .class 文件中间接引用的
我的 pom.xml 配置是:
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
...
<dependency>
<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>3.7.4</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-sql</artifactId>
<version>4.1.3</version>
</dependency>
有什么线索吗?
谢谢。
【问题讨论】:
您尝试混合使用 QueryDSL 版本(3.7.4 和 4.1.3)有什么原因吗?您应该全面使用 4.x 它们是两个不同的组 com.mysema.querydsl 和 com.querydsl 并用于两个不同的模块。但是即使从我的项目中删除 com.querydsl (4.1.3) 仍然会发生错误。发生错误的类有这个import "import com.mysema.query.jpa.JPQLQuery" 它们在两个不同的模块中使用,但您没有在问题中提到这一点,而是在同一个 pom 中显示了它们?请停止浪费人们的时间,并提供一个重现问题的最小、准确的示例 对不起,我不认为我说清楚了。两个工件都在同一个 pom.xml 中。该配置在 Spring Boot 1.3.6 中运行良好,但在 Spring Boot 1.4.0 中却不行。感谢您的时间@AndyWilkinson 【参考方案1】:最后,我解决了将 querydsl-jpa 3.7.4 库更新为 QueryDSL 4 的问题(并修改了我的代码)。似乎 Spring Boot 1.4 不再与 QueryDSL 3 兼容(因为 Spring Data JPA 1.10 升级到 Querydsl 4)。
谢谢。
【讨论】:
我也面临同样的问题。您能否在此处发布 spring boot 并查询适合您的 dsl jar 版本?【参考方案2】:对于 Spring Boot 提供集成的库,您应该使用 BOM 依赖项。基本上在你的 pom/parent pom 中有这个:
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.4.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
当你指定真正的依赖时,删除版本:
<dependency>
<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-sql</artifactId>
</dependency>
这保证了兼容性,因为 BOM 依赖项负责为您提供正确的版本。
更多信息here
【讨论】:
【参考方案3】:Ulises 的回答是正确的,你可以使用
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
也要管理依赖。只需检查 dependence version managed by spring boot 以获取正确的 Group ID 和 Artifact ID
【讨论】:
您的回答与 Ulises 的回答有何不同? 我只想提另一个使用父标签管理依赖的选项。链接文档的另一个原因是spring boot以上是关于Spring Boot 1.4 QueryDSL 依赖问题的主要内容,如果未能解决你的问题,请参考以下文章
带有 QueryDSL 和 Gradle 的 IntelliJ 15
Spring Boot+JPA+QueryDSL=找不到OrderSpecifier
NoSuchMethodException QueryDSL 与 Spring Boot 和 Spring Data Mongo
Spring Boot,Hibernate,Querydsl:antlr.NoViableAltException:意外令牌
Spring Boot QueryDsl 返回原因:java.lang.UnsupportedOperationException: null