Spring Boot 和 JPA 2.0

Posted

技术标签:

【中文标题】Spring Boot 和 JPA 2.0【英文标题】:Spring Boot and JPA 2.0 【发布时间】:2015-02-05 15:14:25 【问题描述】:

我想降级 JPA 版本并使用 JPA 2.0。 Spring Boot 的 Data JPA starter 带有支持 JPA 2.1 的 Hibernate 4.3。根据docs,我应该可以在我的 build.gradle 中做到这一点:

'org.hibernate:hibernate-entitymanager:4.2.16.Final'

但是Hibernate 4.3 仍在使用中。并且没有办法将 javax.persistence:hibernate-jpa 依赖更改为

'org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final'

这可能吗?

【问题讨论】:

【参考方案1】:

我使用的是 Spring boot 1.5.8.RELEASE,我使用的是 java 版本的 hibernate core 降级

<properties>
    <finalName>$project.artifactId</finalName>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <hibernate.version>4.2.21.Final</hibernate.version>
</properties>

【讨论】:

【参考方案2】:

似乎我误解了 Spring Boot 指南。对于任何想知道答案的人来说,仅仅在属性中声明一个版本并不像 Maven 那样简单。但是在查看了 Gradle 关于如何替换依赖项的文档后,我遇到了这一部分: Substituting a dependency module with a compatible replacement

所以基本上我需要做的就是:

configurations.all 
    resolutionStrategy.eachDependency  DependencyResolveDetails details ->
        // Use Hibernate 4.2
        if (details.requested.name == "hibernate-entitymanager") 
            details.useTarget "org.hibernate:hibernate-entitymanager:4.2.16.Final"
        
        // Use JPA 2.0
        if (details.requested.name == "hibernate-jpa-2.1-api") 
            details.useTarget "org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final"
        
    

瞧!

【讨论】:

以上是关于Spring Boot 和 JPA 2.0的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 2.0深度实践之核心技术篇

Spring Boot2.0 JPA 实现分页(简单查询分页、复杂查询分页)

spriing boot 实战

Spring Boot 揭秘与实战 服务器篇 - 其他内嵌服务器 发表于 2017-01-03 | Spring框架 | Spri

spring-data-jpa 和 spring-boot-starter-data-jpa 的区别

211. Spring Boot WebFlux:使用篇