wildcatsの日記

赤羽在住でIT関係の会社の社長やってます。

Spring+Hibernateのセッション管理

ここで書いた話なんですけどSpringのデフォルトでのセッション管理を私が理解していなかっただけでした。
HibernateDaoSupport#getHibernateTemplate()を使っているとそこでSessionのOpen/Closeをしているから
ドメインモデルが分離オブジェクトになってしまっているんですね。
サービスの単位でHibernateのsessionをOpen/Closeさせるように以下のように設定してサービスでドメインモデルのsetterを呼んで値を修正して
サービスを抜けたタイミングでupdate文が発行されることを確認しました。

<bean id="myHibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor">
	<property name="sessionFactory">
		<ref local="sessionFactory" />
	</property>
</bean>

<bean id="customerService" class="org.springframework.aop.framework.ProxyFactoryBean">
	<property name="proxyInterfaces">
		<value>com.pragmaticengine.test.springhibernate.session.service.CustomerService</value>
	</property>
	<property name="interceptorNames">
		<list>
			<value>myHibernateInterceptor</value>
			<value>customerServiceTarget</value>
		</list>
	</property>
</bean>
</pre>