2016-08-30 10 views
0

Spring 4 MVCアプリケーションでは、Controllerレイヤーで@Transactional注釈が使用されていました。しかし、多くの場所では、サービス層(サービス実装クラス)内で使用することが推奨されていました。Spring MVCアプリケーションでControllerレイヤーで@Transactionalを使用する利点

@Controllerクラスに使用する利点は何ですか?

また、iは、データベースにデータを更新サービス層の実装クラスを持っている、私は

@Transactional(propagation = Propagation.REQUIRED, readOnly = true) 

以下のようにトランザクションプロパティの使用に気づい読み取り専用= trueの場合、方法は見つけ使用する際に使用するましたデータベースからデータを取得することもできます。 しかし、readOnly = trueを使用すると、サービス層はデータをとにかく保存できました。 私のアプリケーションは、Spring 4 + Hibernate 4.2.20を使用しています。トランザクション内で「readOnly = true」を使用して、アプリケーションによって

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

を使用

トランザクションマネージャは、データベースにデータを保存することができるのだろうか?

+0

データが正しく保存されていますか? hibernateを使用して@Transactionを読み取り専用に設定すると、データベースへのフラッシング(FlushModeがNEVERに設定されている)が無効になるため、書き込みは行われません。しかし、あなたは何の誤りもありません。 –

+0

一部のJDBCドライバは読み取り専用モードを無視します。 – Andreas

+0

真。要するに、読み込み専用のバネトランザクション中の書き込みの正確な動作は、使用されるスタックに大きく依存するため、これに頼るべきではありません。この問題についての詳細は、この記事を参照してください。https://www.ibm.com/developerworks/library/j-ts1/ –

答えて

0

@Controllerのアノテーション@Transactionalを使用する理由はありません。

ベストプラクティスを実行しないという単純な理由があります。 @Controllerは、MVCロジックのデータ永続性を認識すべきではなく、サービスレイヤーのみを認識すべきです。

また、特定のメソッドだけにクラス全体に注釈を付けないことをお勧めします。これは、アプリケーションを簡単に操作できるようにするための良い方法です。

関連する問題