EntityManager::getDelegate 返回什么?

Mar*_*tus 4 java jpa ejb-3.0

我在 EJB3/JSF 项目中使用 JBoss 7 和默认的 Hibernate JPA 引擎。

EntityManager::getDelegate 上javadoc读取:“返回EntityManager的底层提供程序对象,如果可用。”。

出于好奇,我尝试了以下代码:

@Stateless
public class AFacade {
    @PersistenceContext(unitName="foo")
    EntityManager em;

    public List<A> findAll() {
         l.info("underlying entity manager is: "+em.getDelegate().getClass().getSimpleName());
         ...
    }
Run Code Online (Sandbox Code Playgroud)

然而,输出将类名指示为:org.hibernate.internal.SessionImpl,根据hibernate 文档,它是一个 Session 实现。

我在这里错过了什么?

m3t*_*man 7

JPA 只是 ORM 的一个规范;该规范/API 有一些实现,最著名的是 Hibernate、EclipseLink、OpenJPA。

这意味着它EntityManager只是实现库中类的适配器。在您的情况下,这是org.hibernate.internal.SessionImpl因为您使用 Hibernate 作为 JPA 实现 -这是管理您提供给EntityManager.