IntelliJ依赖中Specifications与Implementations的区别(以Hibernate/JPA为例)
JavaEE项目中Specifications与Implementations依赖的区别
核心本质差异
- Specifications(规范):是Jakarta EE(原JavaEE)官方定义的抽象接口层,仅约定API签名、功能规则、行为标准,没有任何可执行的具体业务逻辑。核心作用是统一行业开发标准,实现应用代码与底层实现的解耦。
- Implementations(实现):是开源社区或商业厂商按照规范要求开发的具体逻辑代码,完全兼容对应版本的规范API,是真正能运行实现功能的代码包。
结合JPA/Hibernate场景的具体说明
JPA(Java Persistence API)就是JavaEE持久化层的典型规范,我们可以直接用这个场景做对照:
JPA规范本身只定义了
@Entity、@Table、EntityManager、JPQL这类标准注解、接口和查询语法规则,本身没有任何ORM操作的实现代码,不能独立运行。
- 如果你仅引入JPA的Specifications依赖,比如Maven坐标
jakarta.persistence:jakarta.persistence-api,开发阶段你可以正常使用JPA的所有注解、调用标准API,代码编译不会报错,但运行时会直接抛出类找不到的异常,因为没有实际执行持久化操作的实现类。 - 如果你要项目的ORM功能正常运行,就必须引入JPA的Implementations类依赖,最常用的就是Hibernate(对应Maven坐标
org.hibernate:hibernate-core)。Hibernate完全实现了JPA规范约定的所有接口,你调用JPA标准的EntityManager.persist()方法时,底层实际执行的就是Hibernate封装好的JDBC操作逻辑。
开发选型建议
- 普通业务项目建议同时引入两类依赖:开发阶段严格调用规范API,避免直接使用实现类的非标准方法,后续如果需要把Hibernate换成EclipseLink等其他JPA实现,业务代码完全不用修改。
- 如果你开发的是通用组件、中间件,仅需引入Specification依赖即可,不用绑定具体实现,接入方可以自行选择适配的实现框架。
内容的提问来源于stack exchange,提问作者moritzl
相关产品推荐
相关产品推荐

