Spring爲您管理會話。展望在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>
如果你仔細看,你會看到會話工廠使用數據源,事務管理器使用sessionfactory,這樣Spring可以爲你提供會話,並將所有持久代碼包裝在一個事務中。
對於實際發生的事情不太清楚。如果這個事務管理器用於特定的方法,這是否意味着該方法內的所有數據庫訪問都將發生在同一個hibernate會話中?如果我在這個方法中加載一個hibernate對象,當方法結束時,它會被更改爲提交嗎? – toc777
@toc事務管理器總是被使用。根據你如何指定要保護的方法,它會做不同的事情。會話在關閉之前自動刷新; hibernate管理,而不是Spring。你應該看看opensessioninview過濾器。 – hvgotcodes
@toc,如果你想知道它是如何工作的,我會建議你下載源代碼,然後使用你的調試器遍歷你的代碼。 – hvgotcodes