SpringのHibernateTemplateを使用していますか?それは私が信じるあなたのためにセッションを管理します。または、Hibernate 3.0.1以降を使用している場合でも、Springがセッションを管理できるはずです。
これを設定する方法を説明するSpringSourceブログエントリがあります。以下に抜粋を含めました:
Hibernate 3.0.1(および最初にリリースされた時点からのJava Persistence API)以降、Springは、これらのテクノロジーで使用可能なテンプレートを使用しなくても、基盤となるリソースを管理できるようになりました。これは、Hibernate APIを直接使用している場合でも(たとえば、SessionFactory.getCurrentSession()を介して)、Spring管理のHibernateセッションを使用していることを意味します。同じことが、JPAEntityManagerFactoryを介して取得されたEntityManagerにも当てはまります。これが、統合されたエクスペリエンスを得るためにSpringのHibernateTemplateを使用する必要がなくなったもう1つの理由です。[...]
以下は、アプリケーションのアセンブルに使用するXMLです。ご覧のとおり、もちろん、HibernateをセットアップするSpringの方法を使用しています(LocalSessionFactoryBeanを使用)。
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!– the works –>
</bean>
<bean id="accountRepo" class="com.mycompany.HibernateAccountRepository">
<constructor-arg ref="sessionFactory"/>
</bean>
さて、前に述べたように、Hibernate 3.0.1の小さな変更により、Springは、Hibernateセッションを経ることなく、Hibernateセッションを管理できるようになりました。欠けていたのは例外の翻訳でした。これを実現するには、リポジトリに@Repositoryアノテーション(Springが提供)を付け、ポストプロセッサを使用して例外変換をオンにするだけです。
@Repository // from org.springframework.stereotype
public class HibernateAccountRepository implements AccountRepository {
// see above for full impl…
}