私は、Hibernateのデフォルトのトラバーサルリゾルバを使ってエンティティのリストを検証するときに、データベースをたくさん呼び出す可能性のあるメソッドを持っています。注釈を@Transactionalに付けると、それはほぼ4倍速く実行されます。いくつかの質問:なぜSpringの@Transactionalヘルプのパフォーマンスが良いですか
1)なぜ高速ですか?
2)メソッドをトランザクションにすることなく、スピードアップをどのように再現できますか?私はトランザクションでこのメソッドをラップする必要はまったくなく、トランザクションにすることはメソッドの本意とは逆です。
おそらくトランザクション変更dbの書き込み数を減らします(減らします)?基礎となるSQLコマンドのデバッグ・ロギングをオンにして調べることができます。 – Kevin
これは読み取り専用の状況です。ただし、Hibernateのトラバーサルリゾルバがインスタンス化される回数を減らすようには見えませんが、各インスタンス間の時間が短縮されます。 – Derek
私はそれがハイバネーションセッションに関係していると信じています。非常に高価なオブジェクトなので、すべてのコールに対して作成されたセッションが1つだけあることを確認する必要があります。 '@ Transactional'は常にそうですが、OpenSessionInViewフィルタを使って手動で行うことができなければ、おそらく他の手段があります。また、 '@ Transactional'を避ける理由もありません。 – mrembisz