Spring Data、Spring Data JPA与Hibernate的关系及隐式依赖疑问
为什么项目中会出现Hibernate?
你引入的spring-boot-starter-data-jpa是Spring Boot提供的一站式starter依赖,它会自动帮你引入JPA规范的默认实现——Hibernate。Spring Boot的starter设计就是为了简化配置,默认提供开箱即用的技术栈,不需要你手动添加Hibernate依赖,它已经被包含在starter的依赖树中了。
Spring Data JPA、JPA、Hibernate三者的关系
- JPA(Java Persistence API):这是Java官方定义的持久化规范,仅包含一组接口、注解(如
@Entity、@Query)和规则,本身没有具体实现。它的作用是让开发者用统一的API操作不同ORM框架,避免绑定到某一个具体实现。 - Hibernate:是JPA规范的主流具体实现框架,完全实现了JPA的所有接口和规范,同时还提供了很多JPA之外的扩展功能。除Hibernate外,EclipseLink等也是JPA实现,但Spring Boot默认选择Hibernate作为
spring-boot-starter-data-jpa的底层实现。 - Spring Data JPA:是Spring框架在JPA之上的封装,进一步简化JPA的使用。比如你定义的
UserJPARepository extends JpaRepository,Spring Data JPA会在运行时自动生成该接口的实现类,无需手动编写SQL或JPA实体管理器代码;它还支持通过方法名自动生成查询、自定义@Query等功能,底层实际的数据库操作依然由Hibernate这样的JPA实现来执行。
你用@Query编写的查询语句出现语法错误时,Hibernate作为底层执行器负责解析和执行查询,所以会抛出Hibernate的异常,这是完全正常的。
内容的提问来源于stack exchange,提问作者Nadezhda Zholtikova
相关产品推荐
相关产品推荐

