使用 Spring boot 时的两个版本的 Hibernate

Posted

技术标签:

【中文标题】使用 Spring boot 时的两个版本的 Hibernate【英文标题】:Two versions of Hibernate when use Spring boot 【发布时间】:2019-10-01 11:50:16 【问题描述】:

我在 build.gradle 文件中明确指定了最新的 Hibernate 版本。在运行构建后,我发现我的依赖库列表中出现了两个不同版本的 Hibernate jar 文件。 Spring boot 引入了较低版本,即使我想使用 5.4.2.Final。我应该使用 Spring boot 引入的版本还是有办法用更新的版本覆盖它?

我做了一些研究,但没有找到我想要的答案。

【问题讨论】:

你更新了 hibernate.version 属性吗? 你的问题有道理。我在父母手下有多个项目,我没有在其中一个孩子项目中指定休眠。因此,休眠版本隐式地取自 Spring boot。当然,下面列出的答案解决了主要问题。 【参考方案1】:

参见 Excluding transitive dependencies :您可以从 Springboot 传递依赖项中排除 hibernate 库,以强制 Gradle 使用您的版本。 首先你需要分析哪个Springboot依赖依赖于hibernate-core(一般是"org.springframework.boot:spring-boot-starter-data-jpa"):为此你可以使用gradledependencies任务来浏览依赖图。

然后您可以按照文档中的说明排除特定的传递依赖:

dependencies

    implementation ("org.springframework.boot:spring-boot-starter-data-jpa") 
        exclude group: "org.hibernate", module: "hibernate-core"
    
    implementation "org.hibernate:hibernate-core:5.4.2.Final"
    ...

注意升级hibernate-core 版本可能会对Spring Jpa 相关库的行为产生副作用(确保您使用的Springboot 版本与hibernate 的新版本兼容)

编辑:还有其他方法可以定义传递依赖约束,请参考官方文档(例如:Customizing Dependency Resolution Behavior)

【讨论】:

以上是关于使用 Spring boot 时的两个版本的 Hibernate的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot整合Spring Data JPA

使用 Cloud Config Server 时的 Spring Boot 外部配置顺序?

企业级spring-boot案例-Spring Boot 启动时的运行方法

企业级spring-boot案例-Spring Boot 启动时的运行方法

企业级spring-boot案例-Spring Boot 启动时的运行方法

企业级spring-boot案例-Spring Boot 启动时的运行方法