Spring Boot Jpa:默认休眠?

Posted

技术标签:

【中文标题】Spring Boot Jpa:默认休眠?【英文标题】:Spring boot Jpa: hibernate as default? 【发布时间】: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 【参考方案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/)中定义的项目

【讨论】:

以上是关于Spring Boot Jpa:默认休眠?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Data JPA:休眠会话问题

休眠验证不使用 Spring Boot LocalValidatorFactoryBean

Spring boot jpa查询无法更新字段

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

Spring Boot + JPA + mysql ...错误的方法?

Spring Boot JPA:@Modifying @Query 没有效果