4

EJB3/JSFプロジェクトでデフォルトのHibernateJPAエンジンを使用してJBoss7を使用しています。

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());
         ...
    }

ただし、出力はクラス名をorg.hibernate.internal.SessionImplとして示します。これは、HibernateのドキュメントによるとSessionの実装です。

ここで何が欠けていますか?

4

1 に答える 1

7

JPAはORMの単なる仕様です。この仕様/APIにはいくつかの実装があり、最もよく知られているのはHibernate、EclipseLink、OpenJPAです。

これは、EntityManagerが実装ライブラリからのクラスへの単なるアダプタであることを意味します。あなたの場合はorg.hibernate.internal.SessionImpl、JPA実装としてHibernateを使用しているためです。これは、に与えるコードを管理するクラスですEntityManager

于 2012-11-17T20:35:54.670 に答える