Spring Data、Spring Data JPA 和 Hibernate 之间有什么关系?

问题描述 投票:0回答:1

我正在使用 Spring 框架编写我的宠物项目,我有

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

在我的 pom 文件中, 然后

public interface UserJPARepository extends JpaRepository<User, Long>

然后

import org.springframework.data.jpa.repository.Query;

...所以我从来没有提到过 Hibernate,对吧?

那么为什么当我在 @Query 中犯错时 Hibernate 对我大喊大叫?!

org.hibernate.query.hql.internal.StandardHqlTranslator$1.syntaxError(StandardHqlTranslator.java:109)

我已经修正了我的错误,但我不明白为什么 Hibernate 会出现在我的项目中,尽管我无论如何都没有导入它...

java hibernate spring-data-jpa spring-data
1个回答
0
投票

Spring Data是Spring家族的一个项目,它提供了一种统一的方式来访问不同类型的数据存储,包括关系数据库、NoSQL数据库等。

Spring Data 包括 Spring Data JPA,它提供了对 JPA 的支持。

现在,什么是 JPA (Java Persistence API)? 嗯,它只是一个规范,仅此而已。这意味着 JPA NOT 和实现(你不能使用),而是一组规则和定义。

要使用 JPA,您需要能够实现它的东西。这就是 Hibernate 发挥作用的地方:Hibernate 是 JPA 规范的实现,因此您可以使用它。

为什么会收到 Hibernate 消息? 好吧,当你包含 spring-boot-starter-data-jpa 时,你就向你的项目添加了几个依赖项(不是一个且唯一的 spring-boot-starter-data-jpa),包括 Hibernate,它是 JPA Spring Boot 使用的实现。

当然,您可以使用其他 JPA 提供商:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.jpa</artifactId>
    <version>3.0.0</version> <!-- Make sure to use the latest version -->
</dependency>

但是 Hibernate 运行良好。

© www.soinside.com 2019 - 2024. All rights reserved.