2013-05-21 21 views
14

Hibernate SessionクラスとEntityManagerクラスの違いは何ですか? EntityManagerはJava Persistence APIを実装していますが、その関係がSessionであるかどうかはわかりません。彼らはまったく関連していますか?Hibernate SessionとEntityManagerの違い

答えて

3

SessionFactoryとSessionは、休止状態に固有です。 EntityManagerはボンネットの下で休止状態のセッションを呼び出します。そして、あなたはEntityManagerの中で利用できない、いくつかの特定の機能が必要な場合、あなたが呼び出すことで、セッションを取得できます。

Session session = entityManager.unwrap(Session.class); 
+0

セッションを閉じるだけで十分ですか? Session上のクローズコールはentityManagerに伝播されますか?セッションから独立して作成されたentityManagerを閉じる必要がありますか? – Sergey

15

SessionEntityManagerは、JPAのための標準化されたAPIで、休止状態固有のAPIです。 をSessionをラップするアダプタクラスと考えることができます(getDelegate()関数を使用してEntityManagerオブジェクトからSessionオブジェクトを取得することもできます)。

これは他のJava APIとは異なります(たとえば、JDBCは標準APIであり、各ベンダーは標準機能を実装するドライバを介してAPIに製品を適合させます)。

+0

機能に違いはありますか、それとも多かれ少なかれですか? – Alexey

+0

これらは同一ではありません(機能には異なる名前や異なる目的、注釈が異なるなど)。 hibernate(および他のすべてのJPAベンダー)が行うことは、ネイティブhibernate APIを呼び出すことによってEntityManager機能を作成するアダプター・オブジェクトを提供することです。 – EmirCalabuch

関連する問題