10.4. JPA 「delegate」の使用
EntityManager インターフェースにより getDelegate() メソッドを通じてベンダー固有の API にアクセスすることができます。 Hibernate をベンダーとして使用し、 org.hibernate.Session を delegate インターフェースとして使用することをお勧めしますが、 別の JPA プロバイダを使用する必要がある場合は 「代替の JPA プロバイダの使用」 で詳細をご確認ください。
どのベンダーを使用するかに関わらず、 Seam コンポーネントで delegate を使用する方法はいくつかあります。 以下にその一例を示します。
@In EntityManager entityManager;
@Create public void init() {
((Session)entityManager.getDelegate() ).enableFilter("currentVersions");
}
@In EntityManager entityManager;
@Create public void init() {
((Session)entityManager.getDelegate() ).enableFilter("currentVersions");
}
ほとんどの Java ユーザーと同様、 型キャストの使用を避けたい場合は、 次の行を
components.xml に追加することで delegate にアクセスすることもできます。
<factory name="session" scope="STATELESS" auto-create="true"
value="#{entityManager.delegate}"/>
<factory name="session" scope="STATELESS" auto-create="true"
value="#{entityManager.delegate}"/>
これでセッションを直接インジェクトできるようになります。