我正在使用 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 会出现在我的项目中,尽管我无论如何都没有导入它...
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 运行良好。