为何未引入JPA实现仍能在Java EE 8中引用EntityManager?
为什么不用手动引入JPA实现也能使用EntityManager?
这是因为你部署应用的Java EE服务器已经内置了JPA的默认实现,不需要你手动在类路径里添加Hibernate、EclipseLink这类JPA实现库。
具体来说:
- 你添加的Java EE 8依赖只是JPA的API规范(比如
javax.persistence包下的类和注解),并不包含具体实现代码。 - Java EE规范明确要求,所有兼容Java EE的应用服务器(比如WildFly、GlassFish、WebLogic等)必须内置一套JPA实现来提供规范的落地能力。比如WildFly默认用Hibernate,GlassFish默认用EclipseLink。
- 你代码里用
@PersistenceContext注入的容器管理型EntityManager,正是由服务器的内置JPA实现来创建和管理的,H2只是作为底层数据库,和JPA实现的提供方无关。
简单说,Java EE服务器帮你把JPA实现的活儿包了,你只需要依赖API规范就行。
内容的提问来源于stack exchange,提问作者user7514788
相关产品推荐
相关产品推荐

