いくつかのトピックを読みましたが、まだ理解できません。DAO レイヤーで休止状態を使用する spring mvc アプリケーションがあります。sessionFactory とトランザクション マネージャーは標準的な方法で構成され、サービス層は `@Transaction` を使用し、さらに `OpenSessionInViewFilter` を使用します。このフィルターはセッション フラッシュ モードを NEVER に設定しますが、tx マネージャーは tx ごとにそれを AUTO に設定し、tx がコミットされると元に戻します。また、「sessionFactory.getCurrentSession()」でセッションを取得します。
私の問題は、読み取り専用ではない方法にあります。メソッドが終了した後、オブジェクトがデータベースに表示されません。session.flush() を明示的に呼び出した後でのみ、セッション状態が DB と同期されます。私としては、それは通常の方法ではありません。非読み取り専用メソッドの自動コミットを行う tx マネージャーまたはおそらく sessionFactory または別の Bean のプロパティが必要だと思います。
では、なぜ FlushMode.AUTO が機能しないのでしょうか? 読み取り専用でない各メソッドで session.flush() を手動で呼び出すのは正常ですか?
<bean name="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
p:dataSource-ref="aimsDataSource">
<property name="packagesToScan">
<list>
<value>net.adaptiveservices.aims.rc.model</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop> <!--TODO Remove in production-->
</props>
</property>
</bean>
<bean name="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory"/>