以前の質問の検索から、セッションファクトリから独自のセッションを作成することを提案するこの@PostConstruct
ようなソリューションを見たことがあります。このような:
getSession().getSessionFactory().openSession()
これは私にとって魅力のように機能しますが、少し...オフに感じます...私が知っておくべき潜在的な落とし穴はありますか?
Session
Springは、スレッドごとにHibernateの境界を管理します。
@PostConstructで注釈が付けられたメソッドでHibernateセッションを利用できるとは期待できません。
それは誤りです、あなたはその時点でセッションを持つことができます。
これはさまざまな方法で実行できます。1つは、SessionのBeanを定義し、SessionFactoryBeanのファクトリメソッド「openSession」によってインスタンス化するようにSpringに指示することです。このようなもの:
<!-- Prototype so there is a new Session in every injection -->
<bean id="newSession" scope="prototype" class="...Session" factory-bean="sessionFactory"
factory-method="openSession" ... >
</bean>
また、SpringSessionFactoryの実装を通じてHibernateマネージドセッションを使用するようにSpringに指示することもできます。