【问题标题】:Spring boot Jpa: hibernate as default?Spring Boot Jpa:默认休眠?
【发布时间】:2017-06-13 15:49:33
【问题描述】:

如果使用 spring-boot-starter-data-jpa 依赖并通过 org.springframework.data.jpa.repository.JpaRepository 扩展存储库类,是这样'plain jpa' 还是休眠?

有什么区别?

【问题讨论】:

  • JPA 是规范,Hibernate 是规范的实现。
  • Spring Data JPA 使用 Hibernate 作为 JPA 默认实现。
  • 所以没有'plain JPA'这样的东西吗?是否默认使用休眠?
  • “JpaRepository”中的“JPA”不是对使用什么 API 的足够明确的答案吗? FWIW JpaRepository 也不是 JPA API 的一部分,它是 Spring 的 API

标签: java spring hibernate spring-boot jpa


【解决方案1】:

JPA 是一个接口,而 Hibernate 是实现。默认情况下,Spring 使用 Hibernate 作为默认的 JPA 供应商。如果您愿意,可以使用任何其他参考实现,例如EclipseLink 用于 Spring 项目中的 Java 持久性。

【讨论】:

    【解决方案2】:

    来自文档:

    Spring Data JPA 旨在显着改进 通过将工作量减少到数据访问层 实际需要。作为开发人员,您编写存储库接口, 包括自定义查找器方法,Spring 将提供 自动执行。

    Spring Data Jpa 充当高级 API,您必须指定底层的 Persistance Provider:

    1) Eclipse 链接配置

    Maven

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.hibernate</groupId>
                        <artifactId>hibernate-entitymanager</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>org.eclipse.persistence</groupId>
                <artifactId>org.eclipse.persistence.jpa</artifactId>
            </dependency>
    

    弹簧设置

    @SpringBootApplication
    public class Application extends JpaBaseConfiguration {
    
        protected Application(DataSource dataSource, JpaProperties properties,
                ObjectProvider<JtaTransactionManager> jtaTransactionManagerProvider,
                ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
            super(dataSource, properties, jtaTransactionManagerProvider, transactionManagerCustomizers);
        }
    
    
        @Override
        protected AbstractJpaVendorAdapter createJpaVendorAdapter() {
            return new EclipseLinkJpaVendorAdapter();
        }
    

    2) 休眠配置

    Maven

    <dependency>
        <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-jpa</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.hibernate</groupId>
                        <artifactId>hibernate-entitymanager</artifactId>
                    </exclusion>
            </exclusions>
    </dependency>
    
     <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
    </dependency>
    

    弹簧设置

    @SpringBootApplication
    class SimpleConfiguration {}
    

    这就是设置休眠提供程序所需的全部内容。当然,您需要在

    中定义所有关键数据源属性
    src/main/resources/application.properties
    
    
    spring.datasource.url = jdbc:mysql://localhost:3306/db
    spring.datasource.username = root
    spring.datasource.password = root
    ...
    

    示例基于(基于https://github.com/spring-projects/spring-data-examples/)中定义的项目

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-03
      • 2014-08-14
      • 2012-07-30
      • 2020-11-13
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      相关资源
      最近更新 更多