2

いくつかのトピックを読みましたが、まだ理解できません。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"/>
4

0 に答える 0