データベースからの読み取りにトランザクションを使用することについては、非常に異なる意見があるようです。
DeveloperWorks の記事「トランザクション戦略: モデルと戦略の概要」からの引用:
データを読み取るだけの場合、なぜトランザクションが必要になるのでしょうか? 答えは、そうではないということです。トランザクションを開始して読み取り専用操作を実行すると、処理スレッドのオーバーヘッドが増加し、データベースで共有読み取りロックが発生する可能性があります (使用しているデータベースの種類と分離レベルの設定によって異なります)。
反対の意見として、Hibernate のドキュメントからの次の引用があります。非トランザクション データ アクセスと自動コミット モード
アプリケーションで自動コミット モードを使用しないこと、およびパフォーマンス上の明らかな利点がある場合、または将来のコード変更の可能性が非常に低い場合にのみ、読み取り専用トランザクションを適用することをお勧めします。データの読み取りまたは書き込みに関係なく、常に通常の ACID トランザクションを優先して、データ アクセス操作をグループ化します。
ここの EclipseLink メーリング リストでも同様の議論が行われています。
では、真実はどこにあるのでしょうか?ベスト プラクティスを読み取るためのトランザクションかどうか。両方とも実行可能なソリューションである場合、トランザクションを使用する基準は何ですか?
私が見る限り、分離レベルが「コミットされた読み取り」よりも高い場合にのみ違いがあります。これは正しいです?
体験談とおすすめは?