2011-06-21 13 views
3

私はHibernateでSpringを使用することについて読んでおり、セッション管理について本当に混乱しています。誰かが私のためにいくつかのことをクリアできることを願っています。Spring + Hibernateセッション管理

まず、HibernateTemplateを使用してセッションをどのように管理しているかわかりません。テンプレートのメソッドSave()を呼び出すとセッションが開いたり閉じたりしますか? find()メソッドを使用すると、切り離されたオブジェクトが返されますか?

トランザクションに関する春のセクションを読んだことがありますが、主に例外の処理について説明しています。私は、トランザクションが終了したときに休止状態のオブジェクトに変更をコミットできるように、休止状態のセッションをSpringトランザクションにバインドする何らかの方法を見つけることを望んでいました。これを達成する方法はありますか?

答えて

2

春にセッションが管理されます。 documentationで見ると、あなたは慎重に見ると、あなたがそのセッションファクトリが表示されます、特にセクション13.3.1で、あなたは

<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="myDataSource"/> 
    <property name="mappingResources"> 
     <list> 
     <value>product.hbm.xml</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <value> 
     hibernate.dialect=org.hibernate.dialect.HSQLDialect 
     </value> 
    </property> 
    </bean> 

を参照して、セクション13.3.3で、あなたはこの

<bean id="transactionManager" 
      class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory"/> 
    </bean> 

を見ますデータソースを使用し、トランザクションマネージャはセッションファクトリを使用します。これにより、Springはセッションを取得し、永続性コードをすべてトランザクションにラップします。

+0

実際に何が起こっているかはあまり明確ではありません。このトランザクションマネージャが特定のメソッドに使用されている場合、そのメソッド内のすべてのデータベースアクセスが同じ休止状態セッションで行われることを意味しますか?このメソッドの中で休止状態のオブジェクトをロードすると、メソッドが終了するとそのオブジェクトがコミットされますか? – toc777

+0

@tocトランザクションマネージャは常に使用されています。保護する方法を指定する方法に応じて、さまざまなことが行われます。セッションは閉じられる前に自動的にフラッシュされます。休止状態は、春ではなく、それを管理します。 opensessioninviewフィルタをチェックアウトする必要があります。 – hvgotcodes

+0

@toc、どのように動作しているか知りたいのであれば、ソースをダウンロードしてデバッガを使ってコードを実行することをお勧めします。 – hvgotcodes