我在 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 实现。
我在这里错过了什么?
JPA 只是 ORM 的一个规范;该规范/API 有一些实现,最著名的是 Hibernate、EclipseLink、OpenJPA。
这意味着它EntityManager只是实现库中类的适配器。在您的情况下,这是org.hibernate.internal.SessionImpl因为您使用 Hibernate 作为 JPA 实现 -这是管理您提供给EntityManager.