web-dev-qa-db-ja.com

EntityManagerを使用してEJBからHibernateセッションにアクセスする

EntityManagerからHibernateSessionオブジェクトを取得することは可能ですか?休止状態の特定のAPIにアクセスしたい...

私はすでに次のようなことを試しました:

org.hibernate.Session hSession =
   ( (EntityManagerImpl) em.getDelegate() ).getSession();

しかし、EJBでメソッドを呼び出すとすぐに、NullPointerExceptionを伴う「EJBでの呼び出し中にシステム例外が発生しました」というメッセージが表示されます。

Glassfish3.0.1を使用しています

18
Bogdan

Bozhopartenon は正しいですが、:

JPA 2では、推奨されるメカニズムは entityManager.unwrap(class) です。

HibernateEntityManager hem = em.unwrap(HibernateEntityManager.class);
Session session = hem.getSession();

実装クラスにキャストしようとしているため(おそらくJDKプロキシを扱っていた)、例外が発生したと思います。インターフェイスにキャストすれば、すべて問題ないはずです(JPA 2バージョンでは、キャストは必要ありません)。

26

Hibernate EntityManagerのドキュメントから、それを行うための好ましい方法は次のとおりです。

Session session = entityManager.unwrap(Session.class);
12
Mouscellaneous

単純な:

Session session = (Session) em.getDelegate();
6
jpkrohling

EntityManagerが適切に挿入され(@PersistenceContextを使用)、nullでない場合、以下が機能するはずです。

org.hibernate.Session hSession = (Session) em.getDelegate();
6
Bozho